#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