Поисковые документы содержат хотя бы одно слово в списке в ElasticSearch - PullRequest
0 голосов
/ 28 апреля 2020

Я хотел бы найти документы с 1) некоторыми фразами, которые должны существовать в одном из трех полей 2), и списком слов, в которых хотя бы одно из них встречается в одном из полей, например ['supply', ' procure ',' purchase '].

Ниже приведен текущий запрос ES, который я использую и который соответствует первому требованию. Однако как мне добавить список слов в этом запросе?

{
    "query": {
        "bool": {
            "must": [ 
                {
                    "multi_match": {
                        "query": "ford",
                        "fields": [
                            "title",
                            "description",
                            "news_content"
                        ]
                    }
                },
                {
                    "multi_match": {
                        "query": "lone star",
                        "fields": [
                            "title",
                            "description",
                            "news_content"
                        ],
                        "type": "phrase"
                    }
                }
            ]
        }
    }
}

1 Ответ

1 голос
/ 28 апреля 2020

Вы почти там, просто добавьте оператор OR в свой запрос, который решит ваш второй вариант использования list words in which at least one of them occurs in one of the fields,

Позвольте мне показать, если вы на примере:

Индекс def

{
    "mappings" :{
        "properties" :{
            "title" :{
                "type" : "text"
            },
            "description":{
                "type" : "text"
            }
        }
    }
}

Пример индекса do c

{
    "title" : "foo",
    "description": "opster"
}
{
    "title" : "bar",
    "description": "stackoverflow"
}
{
    "title" : "baz",
    "description": "nodesc"
}

Поисковый запрос, уведомление, которое я ищу foo amit, список слов, по крайней мере, одно из них должно совпадать в любом из 2 полей

{
    "query": {
        "bool": {
            "should": {
                "multi_match": {
                    "query": "foo amit",
                    "fields": [
                        "title",
                        "description"
                    ],
                    "operator":   "or" --> notice operator OR
                }
            }
        }
    }
}

Результат поиска

"hits": [
            {
                "_index": "white",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.9808291,
                "_source": {
                    "title": "foo",  --> notice this match as `foo` is present and we used opertor OR in query.
                    "description": "opster"
                }
            }
        ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...