Elasticsearch:完成建议不使用空白分析器

时间:2018-01-17 15:23:21

标签: elasticsearch autocomplete autosuggest elasticsearch-analyzers elasticsearch-6

我是Elastic search的新手,我正在尝试使用空白分析器创建一个完成建议器的演示。

  

根据Whitespace Analyzer的文档,它会中断文本   无论什么时候遇到空白字符。所以我的   问题是它是否也适用于完成建议者?

     

所以对于我的完成建议者前缀:" ela", 我期待输出   as"你好弹性搜索。"

我知道一个简单的解决方案是添加多字段输入:

"suggest": {
         "input": ["Hello","elastic","search"]
 }
  

但是,如果这是解决方案那么使用分析仪的意义是什么?分析仪在完成建议器中是否有意义?

我的映射:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "completion_analyzer": {
          "type": "custom",
          "filter": [
            "lowercase"
          ],
          "tokenizer": "whitespace"
        }
      }
    }
  },
  "mappings": {
            "my-type": {
                "properties": {
                    "mytext": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "suggest": {
                        "type": "completion",
                        "analyzer": "completion_analyzer",
                        "search_analyzer": "completion_analyzer",
                        "max_input_length": 50
                    }
                }
            }
        }
}

我的文件:

{
    "_index": "my-index",
    "_type": "my-type",
    "_id": "KTWJBGEBQk_Zl_sQdo9N",
    "_score": 1,
    "_source": {
        "mytext": "dummy text",
        "suggest": {
                 "input": "Hello elastic search."
        }
    }
}

搜索请求:

{
    "suggest": {
        "test-suggest" : {
        "prefix" :"ela", 
        "completion" : { 
            "field" : "suggest",
            "skip_duplicates": true
        }
        }
    }
}

此搜索未向我返回正确的输出,但如果我使用prefix =' hel'我得到了正确的输出:"你好弹性搜索。"

简而言之,我想知道空白分析器是否与完成建议器一起工作? 如果有办法,请你建议我。

PS:我已经找到了这个链接,但我没有找到有用的答案。

ElasticSearch completion suggester Standard Analyzer not working

What Elasticsearch Analyzer to use for this completion suggester?

我觉得此链接很有用Word-oriented completion suggester (ElasticSearch 5.x)。但他们没有使用完成建议器。

提前致谢。

吉米

2 个答案:

答案 0 :(得分:2)

完成提示器无法执行全文查询,这意味着它无法基于多词字段中间的词返回建议。

来自ElasticSearch本身:

  

原因是FST查询与全文查询不同。我们无法在短语中的任何地方找到单词。相反,我们必须从图的左侧开始并向右移动。

正如您所发现的,可以与字段中间匹配的完成建议的最佳选择是边缘n-gram过滤器。

答案 1 :(得分:1)

我知道这个问题已经存在很久了,但是您是否尝试过提出多个建议,一个基于前缀,另一个基于正则表达式?

类似

{
    "suggest": {
        "test-suggest-exact" : {
            "prefix" :"ela", 
            "completion" : { 
                "field" : "suggest",
                "skip_duplicates": true
            }
        },
        "test-suggest-regex" : {
            "regex" :".*ela.*", 
            "completion" : { 
                "field" : "suggest",
                "skip_duplicates": true
            }
        }
    }
}

当第一个为空时,使用第二个建议的结果。好消息是Elasticsearch建议返回有意义的短语。

基于单板的方法,使用完整的查询搜索,然后基于搜索词进行汇总有时会给出断句,这在上下文上是错误的。如果您有兴趣,我可以写更多。