我有一个搜索查询,在输入完整的单词后进行基本搜索。我正在寻找3个字母后的自动建议。 例如, 标题 - 三星galaxy s4 我希望在“sam”之后看到自动建议,而不是完整的单词“samsung”。
答案 0 :(得分:2)
当ngram过滤器工作时,有一个专用的建议用于此用例,称为completion
建议器,它使用内部的另一个数据结构,这将允许您执行毫秒范围内的建议,因此比常规查询使用edgengram快得多。查看此处的文档
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/search-suggesters-completion.html
答案 1 :(得分:0)
您需要使用edgeNGram过滤器。
{
"analysis": {
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edgeNGram",
"min_gram": "3",
"max_gram": "20"
}
},
"analyzer": {
"autocomplete_edge_ngram": {
"filter": ["lowercase"],
"type": "custom",
"tokenizer": "autocomplete_tokenizer"
}
}
}
}
并且映射将是
{
"title_edge_ngram": {
"type": "text",
"analyzer": "autocomplete_edge_ngram",
"search_analyzer": "standard"
}
或者您可以在elasticsearch中使用completion suggester。 对于三个字符检查,您必须在客户端本身进行。