2016-04-19 5 views
0

Я использую elasticsearch Ngramngrams модули elasticsearch не работают

"analysis": { 
    "filter": { 
     "desc_ngram": { 
      "type": "ngram", 
      "min_gram": 3, 
      "max_gram": 8 
     } 
    }, 
    "analyzer": { 
     "index_ngram": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": [ "desc_ngram", "lowercase" ] 
     }, 
     "search_ngram": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": "lowercase" 
     } 
    } 
} 

И у меня есть 2 объекта здесь

{ 
    "name": "Shana Calandra", 
    "username": "shacalandra", 
}, 
{ 
    "name": "Shana Launer", 
    "username": "shalauner", 
}, 

И используя этот запрос

{ 
    query: { 
     match: { 
      _all: "Shana" 
     } 
    } 
} 

Когда я ищу с этим запросом , он возвращает мне оба документа, но я не могу найти часть слова здесь, например, я не могу использовать «Шан» вместо «Шана» в q uery, потому что он ничего не возвращает.

Может быть, мое отображение неправильно, я не могу понять, проблема заключается в отображении или по запросу

+0

Возможно, проблема связана с полем '_all', и стандартный анализатор используется для этого поля, если не указано иное. Попробуйте выполнить поиск по имени. Это работает? – Val

ответ

0

Если указать

"mappings": { 
    "test": { 
     "_all": { 
     "index_analyzer": "index_ngram", 
     "search_analyzer": "search_ngram" 
     }, 

для отображения _all поля, то он будет работать. _all имеет свои собственные анализаторы, и я подозреваю, что вы использовали анализаторы только для name и username, а не для _all.

+0

dont return with name или username – Gor

+0

Я не понимаю, что вы имели в виду. –

Смежные вопросы