使用弹性搜索实现阿里巴巴等应用程序的AutoSuggestion功能

时间:2017-06-28 05:25:23

标签: spring elasticsearch

我正在努力实施" autosuggestion"我的应用程序中的功能,当用户键入一组字母时,她应该能够查看给定输入的建议列表,我希望我的功能与阿里巴巴或类似网站的工作方式类似。

我正在使用弹性搜索和java.Can任何人都可以帮助我或提供有关如何实现此功能的任何建议。

1 个答案:

答案 0 :(得分:0)

弹性搜索中的提示可以使用1)前缀匹配来实现2)完成建议3)Edge NGrams。

在这种方法中,我选择" 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:上面列出的每种方法都有自己的优势和背景。