В чем разница между MUST
и SHOULD
BOOL запрос в ES?
Если я ТОЛЬКО хочу, чтобы результаты, которые содержат мои термины, я должен затем использовать must
?
У меня есть запрос, который должен содержать только определенные значения, а также нет результатов, которые имеют более низкую дату / время, чем сегодняшние время / дата - СЕЙЧАС
Также
Могу ли я использовать несколько фильтров внутри кода, как показано ниже:
"filtered": {
"filter": {
"bool" : {
"must" : {
"term" : { "type" : 1 }
"term" : { "totals" : 14 }
"term" : { "groupId" : 3 }
"range" : {
"expires" : {
"gte": "now"
}
}
},
источник
must
категорий или цен, а такжеshould
для атрибутов, таких как размер и цвет. Теперь, если выбраны размеры L и XL, то между этими двумя нужно выбрать значение, но если выбран также зеленый цвет, он должен быть обязательным для (размеры L ИЛИ XL) И (зеленый цвет). Это возможно?minimum_number_should_match = 1
для того, чтобы реализовать идею, что «хотя бы один из этих пунктов должен соответствовать».Поскольку это популярный вопрос, я хотел бы добавить, что в Elasticsearch версии 2 все немного изменилось.
Вместо
filtered
запроса следует использоватьbool
запрос на верхнем уровне.Если вас не волнует количество
must
частей, поместите эти части вfilter
ключ. Отсутствие оценки означает более быстрый поиск. Кроме того, Elasticsearch автоматически определит, кэшировать ли их и т. Д.must_not
, Одинаково подходит для кэширования.Ссылка: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
Кроме того, помните, что
"gte": "now"
это невозможно кэшировать из-за гранулярности в миллисекундах. Используйте два диапазона вmust
предложении: один сnow/1h
другим, а другой сnow
таким, чтобы первый мог кешироваться некоторое время, а второй для точной фильтрации, ускоренной для меньшего набора результатов.источник
Как сказано в документации :
Другими словами, результаты должны быть подкреплены все запросы представить в сусло пункте (или соответствовать по крайней мере один из должны оговорок , если нет обязательно раздел.
Поскольку вы хотите, чтобы ваши результаты удовлетворяли всем запросам, вы должны использовать must .
Вы действительно можете использовать фильтры внутри логического запроса.
источник