2015-05-20 2 views
8

Я новичок в ES. У меня возникли проблемы с поиском точных совпадений.эластичный поиск точная фраза соответствие

Предположим, что у моего индекса есть поле под названием movie_name. Давайте предположим, что у меня есть 3 документа со следующими значениями

  1. MOVIE_NAME = Mad Max
  2. MOVIE_NAME = Mad Max
  3. MOVIE_NAME = Mad Max 3d

Если мой поисковый запрос Mad Max, Я хочу вернуть первые 2 документа, но не третий.

Если я делаю «not_analyzed» решение я буду получать только документ 1, но не 2.

Что мне не хватает?

ответ

0

Использование Phrase matching так:

{ 
"query": { 
    "match_phrase": { 
     "movie_name": "a" 
    } 
} 
} 
+0

Я пробовал это, но это все еще возвращает «mad max 3d». Как говорится в документации, «но хранит только документы, содержащие все условия поиска», в моем случае оба термина находятся в «mad max 3d». – userab12345

+0

is movie_name проанализированное поле? потому что тот факт, что запрос должен соответствовать верхнему и нижнему региону, можно решить, проанализировав поле –

+0

да, он проанализировал. – userab12345

4

Я был в состоянии сделать это, используя следующие команды, в основном создать пользовательский анализатор, использовать Tokenizer ключевое слово, чтобы предотвратить лексемизацию. Затем используйте анализатор в «отображениях» для желаемого поля, в данном случае «movie_name».

 

     PUT /movie 
     { 
     "settings":{ 
     "index":{ 
      "analysis":{ 
       "analyzer":{ 
        "keylower":{ 
        "tokenizer":"keyword", 
        "filter":"lowercase" 
        } 
       } 
      } 
     } 
     }, 
     "mappings" : { 
      "search" : { 
       "properties" : { 
        "movie_name" : { "type" : "string", "analyzer":"keylower" } 
       } 
      } 
     } 
    } 

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