我正在努力实施" autosuggestion"我的应用程序中的功能,当用户键入一组字母时,她应该能够查看给定输入的建议列表,我希望我的功能与阿里巴巴或类似网站的工作方式类似。
我正在使用弹性搜索和java.Can任何人都可以帮助我或提供有关如何实现此功能的任何建议。
答案 0 :(得分:0)
在这种方法中,我选择" Ngrams analyzer"对于自动建议,首先定义一个nGram过滤器,然后将过滤器链接到自定义分析器,并将分析器应用于我们选择提供建议的字段。
"settings": {
"analysis": {
"filter": {
"nGram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding",
"nGram_filter"
]
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
一旦我们有了映射集,我们就可以将分析器(nGram_analyzer)分配给参与其中的建议。 下一步是向extartc建议写一个查询,如下所示。
"query": {
"match": {
"_all": {
"query": "gates",
"operator": "and"(optional , needed when we have multiple words or a senetence)
}
}
}
以下材料有助于深入了解ngram tokenizer https://www.elastic.co/guide/en/elasticsearch/reference/1.6/analysis-ngram-tokenizer.html
PS:上面列出的每种方法都有自己的优势和背景。