2

我正在使用 Elasticsearch 构建一个小型搜索应用程序,并试图弄清楚如何使用多词(短语)建议构建一个自动完成功能。我有它的工作......有点......

我得到的主要是单个单词的建议,但是当我按下空格键时 - 它会杀死建议。

例如,如果我输入“fast”,它就可以正常工作,如果我输入“fast” - 这会阻止建议出现。

我正在使用Edge N Grams并且已经按照这里这里match_phrase_prefix的例子来构建它。对于in和刚刚使用的字段 include_in_all: false 取消除标题和内容之外的所有字段。我开始认为这只是因为我在一个小数据集上进行测试,并且根本没有足够的标记化术语来产生多词建议。请查看下面的相关代码并告诉我哪里出错了,如果有的话?_allmatch_phrase_prefix

"analysis": {
"filter": {
 "autocomplete_filter": {
  "type": "edge_ngram",
  "min_gram": "1",
  "max_gram": "20",
  "token_chars": [
    "letter",
    "digit"
  ]
 }
},
"analyzer": {
  "autocomplete": {
    "type": "custom",
    "tokenizer": "whitespace",
    "filter": [
       "lowercase",
       "asciifolding",
       "autocomplete_filter"
    ]     
  },
  "whitespace_analyzer": {
    "type": "custom",
    "tokenizer": "whitespace",
    "filter": [
      "lowercase",
      "asciifolding"
      ]
4

1 回答 1

0

尝试keyword分词器

"autocomplete": {
    "type": "custom",
           "filter": [
       "lowercase",
       "asciifolding",
       "autocomplete_filter"
    ],
 "tokenizer": "keyword"     
  }

供参考 elasticsearch mapping tokenizer 关键字以避免拆分令牌并启用通配符

因为默认情况下它的标准分析器会在空格上拆分您可以检查您的令牌,如 curl 'localhost:9200/test/_analyze?pretty=1&analyzer=my_edge_ngram_analyzer' -d 'FC Schalke 04'参考https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html

于 2016-04-30T20:38:38.573 回答