эластичный поиск по / и возможна вложенность?

#indexing #elasticsearch

#индексирование #elasticsearch

Вопрос:

Могут ли и / или быть вложены в фильтры? Я хочу отфильтровать что-то вроде этого… a=1 AND ( d=NULL OR d>5 )

Кто-нибудь может помочь?

Комментарии:

1. и / или фильтр возможны, но могу ли я вложить их? … я хочу отфильтровать, скажем, все с именем = ‘rado’ и date = NULL (или не задано) или date> ‘текущая дата’. дата может быть не установлена или больше, чем сейчас.

2. Вы не указали, о каком языке программирования / среде / ОС / etc вы здесь говорите! Попробуйте добавить несколько более подходящих тегов.

3. эластичный поиск elasticsearch.org

Ответ №1:

Вы можете использовать строку запроса Lucene, подобную этой, в эластичном поиске:

http://www.elasticsearch.org/guide/reference/query-dsl/query-filter.html

и вот ссылка на то, как вы можете использовать () для группировки … следует отметить одну вещь: я обнаружил, что префикс групповых операторов символом must have возвращает более точные результаты.

http://lucene .apache.org/java/3_2_0/queryparsersyntax.html

группировка в конце.

… о, и если вы собираетесь использовать больше, чем RangeQuery может охватить этот случай, установив либо верхний, либо нижний термин равным null.

J.

Ответ №2:

Возможно, это немного запоздало, но если кто-то еще ищет это, я обнаружил, что поисковое слово И фильтры легко добавить. Просто используйте больше слов в запросе и разделяйте их пробелом.

Пример Scala:

 val queryString = client.prepareSearch().setQuery(QueryBuilders.matchQuery("json.path.to.node", "sky car")).setSize(MAX_RESULTS)
val response = queryString.execute().actionGet()
  

Теперь в ответе будут все результаты, которые содержат оба sky AND car