В настоящее время я пытаюсь перенести приложение на основе solr вasticsearch.
У меня есть этот запрос Lucene
((
name:(+foo +bar)
OR info:(+foo +bar)
)) AND state:(1) AND (has_image:(0) OR has_image:(1)^100)
Насколько я понимаю, это комбинация предложений MUST в сочетании с логическим ИЛИ:
«Получить все документы, содержащие (foo AND bar в названии) ИЛИ (foo AND bar в info). После этого фильтра результаты по состоянию состояния = 1 и повысить документы, которые имеют изображение.»
Я пытался использовать запрос bool с MUST, но мне не удалось получить логическое ИЛИ в выражениях must. Вот что у меня есть:
GET /test/object/_search
{
"from": 0,
"size": 20,
"sort": {
"_score": "desc"
},
"query": {
"bool": {
"must": [
{
"match": {
"name": "foo"
}
},
{
"match": {
"name": "bar"
}
}
],
"must_not": [],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
}
}
Как видите, НЕОБХОДИМО, чтобы условия для «информации» отсутствовали.
у кого-нибудь есть решение?
Огромное спасибо.
** ОБНОВИТЬ **
Я обновил свой запросasticsearch и избавился от этой функциональной оценки. Моя базовая проблема все еще существует.
источник
Ответы:
Пример:
Вы хотите увидеть все элементы (круглые И (красные ИЛИ синие)):
Вы также можете делать более сложные версии ИЛИ, например, если вы хотите сопоставить по крайней мере 3 из 5, вы можете указать 5 опций в поле «следует» и установить «минимум_шуль» в 3.
Спасибо Глену Томпсону и Себастьянсонсо за то, что они обнаружили, что мое гнездование было не совсем правильным.
Спасибо также Фатмайку за то, что он указал, что «термин» становится «совпадением» в ElasticSearch 6.
источник
should
в верхний уровеньbool
, и в том числеminimum_should_match: 1
работа?[term] malformed query, expected [END_OBJECT] but found [FIELD_NAME]
. Это как-то зависит от версии?minimum_should
равно 1, и вbool
результате переноса этой группы будет значение true, если хотя бы один элемент соответствует, и false, если ни один не соответствует. Моим мотивом для создания этого ответа было то, что я решал именно такую проблему, и доступная документация и даже ответы, которые я мог найти на сайтах, подобных этому, были в лучшем случае бесполезны, поэтому я продолжал исследовать, пока не почувствовал, что у меня есть достаточно твердое понимание о том, что происходило. Я с радостью приветствую любые конструктивные указания о том, как я могу улучшить ответ.Мне наконец удалось создать запрос, который делает именно то, что я хотел:
Отфильтрованный вложенный логический запрос. Я не уверен, почему это не задокументировано. Может быть, кто-то здесь может сказать мне?
Вот запрос:
В псевдо-SQL:
Помните, что от анализа полей документа и отображений зависит, как name = foo обрабатывается внутренне. Это может варьироваться от нечеткого до строгого поведения.
«imum_should_match »: 1 говорит, что по крайней мере одно из утверждений must должно быть истинным.
Это утверждение означает, что всякий раз, когда в наборе результатов есть документ, содержащий has_image: 1, он увеличивается в 100 раз. Это меняет порядок следования результатов.
Веселитесь, ребята :)
источник
Вот как вы можете вкладывать несколько запросов bool в один внешний запрос bool, используя Kibana,
Вот как вы можете вложить запрос в ES
Есть больше типов в "bool", как -
Фильтр
не должен
источник
Недавно мне тоже пришлось решить эту проблему, и после МНОГО проб и ошибок я придумал это (в PHP, но отображается напрямую в DSL):
Который сопоставляется с чем-то вроде этого в SQL:
Ключ во всем этом -
minimum_should_match
настройка. Без этого тотfilter
полностью перекрываетshould
.Надеюсь, это поможет кому-то!
источник
В
must
вам нужно добавить условие запроса массив , который вы хотите работать сAND
и вshould
вам нужно добавить условие запроса , который вы хотите работать сOR
.Вы можете проверить это: https://github.com/Smile-SA/elasticsuite/issues/972
источник
Если вы использовали анализатор запросов Solr по умолчанию или Lucene, вы всегда можете поместить его в запрос строки запроса:
Тем не менее, вы можете использовать логический запрос , например, тот, который вы уже опубликовали, или даже их комбинацию.
источник