2015-05-09 2 views
1

Я использую Elasticsearch, чтобы пользователь мог вводить термин для поиска. У меня есть «имя» следующее свойство Я хотел бы найти, например:Elasticsearch многопользовательский поиск

'name': 'The car is black'

Я хотел бы, чтобы этот документ возвращается, если следующий используется для поиска black car или car black.

Я пробовал делать bool и выполнял несколько терминов ['black', 'car'], но кажется, что он работает только в том случае, если вся строка соответствует.

Так что я действительно хотел бы сделать больше, значит ли этот термин содержать оба слова в любом порядке.

Может кто-нибудь, пожалуйста, поймать меня на правильном пути? Некоторое время я бил головой об этом.

+0

Не могли бы вы предоставить общее представление и запрос? Вероятно, это связано с [анализаторами] (http://www.elastic.co/guide/en/elasticsearch/reference/1.5/analysis-analyzers.html) – moliware

+0

Мой документ выглядит так: /my_index/food { _id: 1, 'category': 'dessert', 'name': 'здоровое корица яблочное strudel' } Так что если у пользователя есть термин поиска «здоровое яблоко», это будет соответствовать, но если они набрали ' apple pie ', это не соответствовало бы, потому что имя не содержало всех слов, которые они набрали. – mvcNewbie

ответ

0

Если кажется, что он работает только тогда, когда вся строка является матчем, сначала убедитесь, что в индексе отображения вашего строковое свойство name анализируется, то есть отображение этого свойства не содержит"index": "not_analyzed". Если это не так, вам нужно переиндексировать свой индекс, чтобы иметь возможность искать токены, а не только целую фразу.

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

  1. Условия запроса с "minimum_should_match" параметр, равный количеству слов вошли.
  2. Bool query с обязательным условием, содержащим запросы термина на каждое слово.
  3. Common terms query, который имеет хороший чистый синтаксис для этой цели (вам не нужно разбивать строку ввода и создавать более сложную структуру запросов в приложении, как и в предыдущих двух) в дополнение к более разумному подходу к анализу стоп-слов.
+0

Отличный ответ, спасибо за помощь tiurin! – mvcNewbie

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