2016-04-30 84 views
2

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

我主要是单个单词的建议,但是当我点击空格键 - 它杀死的建议。

例如,如果我输入“fast”,它会正常工作,如果我输入“fast” - 停止出现建议。

我使用的是Edge N Gramsmatch_phrase_prefix,并按照示例herehere构建它。对于match_phrase_prefix中的_all字段,只是使用include_in_all:false来取消除标题和内容以外的所有字段。我开始认为它仅仅是因为我正在测试一个小数据集,并且没有足够的标记术语来产生多词建议。请看下面的相关代码,并告诉我哪里出错了,如果有的话?

"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" 
     ] 

回答

0

尝试keyword标记者

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

参考 elasticsearch mapping tokenizer keyword to avoid splitting tokens and enable use of wildcard

因为默认情况下它的标准anaylyzer上空间 您可以检查您的令牌一样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

+0

感谢似乎分裂正是我所期待的 – user3125823