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

Jim*_*mmy 8 autocomplete autosuggest elasticsearch elasticsearch-analyzers elasticsearch-6

我是Elastic search的新手,我正在尝试使用whitespace Analyzer创建一个Completion建议器的演示.

根据Whitespace Analyzer的文档,它会在遇到空白字符时将文本分解为术语.所以我的问题是它是否也适用于完成建议者?

所以对于我的完成建议器前缀:"ela", 我期待输出为"Hello elastic search".

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

"suggest": {
         "input": ["Hello","elastic","search"]
 }
Run Code Online (Sandbox Code Playgroud)

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

我的映射:

{
  "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
                    }
                }
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

我的文件:

{
    "_index": "my-index",
    "_type": "my-type",
    "_id": "KTWJBGEBQk_Zl_sQdo9N",
    "_score": 1,
    "_source": {
        "mytext": "dummy text",
        "suggest": {
                 "input": "Hello elastic search."
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

搜索请求:

{
    "suggest": {
        "test-suggest" : {
        "prefix" :"ela", 
        "completion" : { 
            "field" : "suggest",
            "skip_duplicates": true
        }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个搜索没有返回正确的输出,但是如果我使用prefix ='hel'我得到正确的输出:"Hello elastic search".

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

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

ElasticSearch完成建议标准分析器无法正常工作

Elasticsearch Analyzer用于此完成建议器的内容?

我发现这个链接是有用的面向字的​​完成建议器(ElasticSearch 5.x).但他们没有使用完成建议器.

提前致谢.

吉米

Sim*_*wer 5

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

ElasticSearch本身:

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

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