Elasticsearch с вложенным запросом И / ИЛИ - PullRequest
0 голосов
/ 07 июня 2019

Я борюсь с написанием эластичного поискового запроса с несколькими условиями И / ИЛИ.

Это в основном сводится к следующей логике: cond1 && (cond2 || cond3 || cond4)

Как упомянуто в документах , документ считается совпадающим, если он удовлетворяет только условию must. Положения must в этом случае действуют как импульс, т. Е. Если документ соответствует одному или нескольким пунктам must в дополнение к условию must, он будет иметь более высокий показатель релевантности, если предположить, что cond2, cond3 и cond4 являются запросами, которые вычисляют оценка релевантности.

Проблема в том, что мне нужны только документы, которые также соответствуют хотя бы одному из условий ИЛИ.

Обратите внимание, что я использую ES6.3. Я также пробовал Запросы с несколькими словами , но эти результаты также неверны.

Добавление boost , похоже, не влияет на результаты, у меня есть результаты, которые соответствуют только первому условию.

{
    "query": {
        "bool": {
            "must": [
              {
                    "term": {
                        "event.keyword": {
                            "value": "webhook.trigger"
                        }
                    }
                }
            ],
            "should": [
                {
                    "match": {
                        "metaData.webhook.title": "My Example Title 1"
                    }
                },
                {
                    "match": {
                        "metaData.webhook.title": "Testing"
                    }
                },
{
                    "match": {
                        "metaData.webhook.url": "myurl.com"
                    }
                }
            ]
        }
    }
}

1 Ответ

2 голосов
/ 07 июня 2019

A should запрос работает как ИЛИ , только если нет запроса must.В вашем случае вы должны заключить запрос should в другой запрос bool.

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "event.keyword": {
                            "value": "webhook.trigger"
                        }
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "match": {
                                    "metaData.webhook.title": "My Example Title 1"
                                }
                            },
                            {
                                "match": {
                                    "metaData.webhook.title": "Testing"
                                }
                            },
                            {
                                "match": {
                                    "metaData.webhook.url": "myurl.com"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...