2016-02-12 5 views
0

У меня есть то, что, я считаю, является прецедентом, который хотел бы использовать многие, используя эластичный поиск. Вот мой шаблонЭластичный поиск соответствует точной строке с английским анализатором

PUT _template/test 
{ 
    "template" : "test*", 
    "settings" : { 
     "number_of_shards" : 5, 
     "number_of_replicas" : 1 
    }, 
    "mappings" : { 
     "test": { 
     "properties": { 
      "name": { 
      "type": "string", 
      "index": "analyzed" 
      }, 
     "description": { 
      "type": "string", 
      "index": "analyzed", 
      "analyzer":"english", 
      "fields": { 
       "raw": { 
       "type": "string", 
       "index": "not_analyzed" 
       } 
      } 
      } 
     } 
     } 
    } 
} 

Теперь я собираюсь поставить одну запись в индексе

POST /test/test 
{ 
    "name":"test-1", 
    "description":"on the first day of christmas my true love gave to me a partridge in a pear tree" 
} 

Теперь представьте, у меня есть миллион этих записей. Что я хочу сделать, так это то, что если я буду искать on the в поле описания, я бы хотел, чтобы ничего не возвращалось, потому что это обычные слова, о которых должен заботиться английский анализатор. Однако, если я выполняю поиск точного текста "on the", тогда мне бы хотелось, чтобы документы возвращались в соответствии с точным текстом.

Мой вопрос к сообществу эластичных, как я могу это разрешить и как должен выглядеть запрос? Я добавил поле .raw для описания, но независимо от того, что моя строка запроса, я не могу получить точный текст, чтобы возвращать любые результаты.

+0

Вы должны запросить его, как GET/тест/тест/_search '{ "запрос": { "термин": { "description.raw": "на" } }}' – Richa

+0

, когда я бегу, что точное запрос Я получаю '{ "взял": 1, "timed_out": ложные, "_shards": { "всего": 5, "успешно": 5, "Failed": 0 }, "хиты": { «общий»: 0, «max_score»: NULL, «хиты»: []} } ' –

+0

Это может быть потому, что у вас нет никакого описания с этим точным текстом – Richa

ответ

0

Ваше первое требование уже выполнено английским анализатором. Теперь переходим ко второй проблеме, где, если передано «на», вы хотите получить полный согласованный документ. В случае второй проблемы поиск должен выполняться в поле «description. Raw». Отметьте поле «raw»: { «type»: «string», «index»: «проанализировано» }, и здесь стандартный анализатор стандартен, поэтому вы получите весь документ, где «on» или «the» или « на «совпадающем», но если вы хотите совместить точный документ, содержащий «в слове», настройте новый пользовательский анализатор для поля «description.raw», используя токенизатор «edge ngram». Подробнее см. ниже ссылку https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_time_search_as_you_type.html

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