我最近更新了我的ngram实现设置,以使用输入时搜索字段类型。https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-as-you-type.html
这很有效,但我注意到部分搜索不起作用。如果我搜索编号00060434,我会得到想要的结果,但我也希望能够搜索60434,那么它应该返回Document 3。
有没有办法用输入时搜索字段类型来做这件事,或者我只能用ngram做这件事?
PUT searchasyoutype_example
{
"settings": {
"analysis": {
"analyzer": {
"englishAnalyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"trim",
"ascii_folding"
]
}
},
"filter": {
"ascii_folding": {
"type": "asciifolding",
"preserve_original": true
}
}
}
},
"mappings": {
"properties": {
"number": {
"type": "search_as_you_type",
"analyzer": "englishAnalyzer"
},
"fullName": {
"type": "search_as_you_type",
"analyzer": "englishAnalyzer"
}
}
}
}
PUT searchasyoutype_example/_doc/1
{
"number" : "00069794",
"fullName": "Employee 1"
}
PUT searchasyoutype_example/_doc/2
{
"number" : "00059840",
"fullName": "Employee 2"
}
PUT searchasyoutype_example/_doc/3
{
"number" : "00060434",
"fullName": "Employee 3"
}
GET searchasyoutype_example/_search
{
"query": {
"multi_match": {
"query": "00060434",
"type": "bool_prefix",
"fields": [
"number",
"number._index_prefix",
"fullName",
"fullName._index_prefix"
]
}
}
}
1条答案
按热度按时间6jygbczu1#
我认为您需要查询
number
、number._2gram
和number._3gram
,如下所示:search_as_you_type
创建3个子字段。关于这篇文章的工作原理,您可以查看更多信息:https://ashish.one/blogs/search-as-you-type/