elasticsearch预定搜索解决方案

时间:2015-03-26 17:44:16

标签: search elasticsearch

尝试获取预测下拉搜索,我如何使搜索始终从左到右开始 比如“I_kimchy park”,“park” 如果我只搜索“par”,我必须得到只有公园作为回报,但在这里我得到两个单词,如何将空白空间视为一个角色

POST /test1
{
  "settings":{
    "analysis":{
      "analyzer":{
        "autocomplete":{
          "type":"custom",
          "tokenizer":"standard",
          "filter":[ "standard", "lowercase", "stop", "kstem", "edgeNgram" ,"whitespace"]
        }
      },
      "filter":{
        "ngram":{
          "type":"edgeNgram",
          "min_gram":2,
          "max_gram":15,
          "token_chars": [ "letter", "digit"]
        }
      }
    }
  }
}




PUT /test1/tweet/_mapping
{
    "tweet" : {
        "properties" : {
            "user": {"type":"string", "index_analyzer" : "autocomplete","search_analyzer" : "autocomplete"}
        }
    }}


POST /test1/tweet/1
{"user" : "I_kimchy park"}


POST /test1/tweet/3
{  "user" : "park"}



GET /test1/tweet/_search
{
 "query": {
   "match_phrase_prefix": {
     "user": "park"
   }

 }

}

1 个答案:

答案 0 :(得分:1)

这是因为您的standard标记生成器会将您的user字段拆分为空格。您可以使用Keyword Tokenizer将整个字符串视为单个值(单个标记)。

请注意,此更改可能会影响您使用此字段的其他功能。您可能必须为此添加专用​​的“非标记化”user字段。