我有四个文档,其字段名为“全名”。
文件:
我想为此 Realm 做一个自动完成器。一些例子:
搜索:“Abi”
结果:“Abigail Harrison”,“Abigale Hardison”,“Abilene Haveton”
搜索:“Abig”
结果:“Abigail Harrison”,“Abigale Hardison”
搜索:“Abigail Har”
结果:“Abigail Harrison”,“Abigale Hardison”
搜索:“Abilene Hav”
结果:“Abilene Haveton”,“Abilene-Havington”
搜索:“Har”
结果:“Abigail Harrison”,“Abigale Hardison”
我不要这样的东西:(!)
搜索:“iga”
结果:“Abigail Harrison”,“Abigale Hardison”
空格和连字符应被忽略,并且我希望所有生成的标记都小写,因此搜索查询不应区分大小写。
我的ES设置如下。
{
"mappings": {
"person": {
"properties": {
"fullname": {
"index": "analyzed",
"index_analyzer": "autocomplete",
"search_analyzer": "standard",
"type": "string"
}
}
}
},
"settings": {
"index": {
"analysis": {
"analyzer": {
"autocomplete": {
"filter": [
"lowercase",
"edgengram"
],
"tokenizer": "whitespace"
}
},
"filter": {
"edgengram": {
"max_gram": 50,
"min_gram": 3,
"type": "edgeNGram"
}
}
}
}
}
}
最佳答案
编制索引时,您应该使用标准的分词器以及小写字母,ASCII折叠,suggestation_shingle,edgengram和在搜索时使用关键字分析器。
尝试使用如下所示的内容:
"index":{
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding",
"suggestions_shingle",
"edgengram"
]
}
},
"filter": {
"suggestions_shingle": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 5
},
"edgengram": {
"type": "edgeNGram",
"min_gram": 2,
"max_gram": 30,
"side": "front"
}
}
}
}
"mappings": {
"person": {
"properties": {
"fullname": {
"index": "analyzed",
"index_analyzer": "autocomplete",
"search_analyzer": "keyword",
"type": "string"
}
}
}
}
然后尝试使用匹配查询进行搜索。它应该可以解决您的问题。
谢谢
关于search - ElasticSearch自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24882196/