2015-03-26 2 views
0

Попытка получить прогнозный поиск вниз, Как я могу сделать поиск всегда начинается слева направо как в примере «I_kimchy park», «park» Если я ищу только «пар», я должен получить только парк взамен, но здесь я получаю оба слова, как лечить пустое пространство как персонажelasticsearch predective search solution

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

Это происходит потому, что ваш standard токенизатор разбивает user поле пробелами. Вы можете использовать Keyword Tokenizer, чтобы обрабатывать целую строку как одно значение (один токен).

Пожалуйста, обратите внимание, что это изменение может повлиять на другие ваши функции, которые используют это поле. Для этой цели вам, возможно, придется добавить выделенное поле «notkenken» user.

+0

Спасибо, сработало ... – user1028697