Multi Match Query для нескольких слов с оператором AND

Таким образом, мой сценарий состоит в том, что в моем приложении есть встроенный поиск, такой же, как у нас здесь, в строке заголовка сайта Udemy, и пользователь может ввести в него более одного слова. Теперь я хочу использовать этот текстовый поиск, введенный пользователем, для опроса по нескольким полям.

Мультиполя, к которым я обращаюсь, имеют следующее отображение

_mapping

{
    "category": {
        "type": "keyword"
    },
    "designers": {
        "type": "nested",
        "properties": {
            "name": {
                "type": "keyword"
            }
        }
    },
    "story": {
        "type": "text"
    },
    "foundryName": {
        "type": "text",
    }
}

Моя проблема здесь заключается в том, как я могу выполнить поиск по нескольким словам, например "designerFirstName1 category1 foundryName1", и получить результаты, в которых у сопоставляемого документа есть каждое слово из любого из нескольких полей, в которых я ищу, также, поскольку я продолжаю добавлять другие слова, набор результатов должен быть уменьшенным.

запрос

{
    "query": {
        "bool": {
            "should": [
                {
                    "nested": {
                        "path": "designers",
                        "query": {
                            "match": {
                                "designers.name": {
                                    "query": "designerFirstName1 category1 foundryName1",
                                    "fuzziness": "auto"
                                }
                            }
                        }
                    }
                },
                {
                    "multi_match": {
                        "query": "designerFirstName1 category1 foundryName1",
                        "type": "cross_fields",
                        "fields": [
                            "story",
                            "foundryName",
                            "category",
                        ]
                    }
                }
            ],
            "minimum_should_match": 1
        }
    }
}

Ожидаемый результат заключается в том, что этот тип документа должен быть выше, а затем по мере того, как мы опускаемся, результаты начинают иметь не все мультислово в каком-либо одном поле (как показано ниже)

{
    "category": [
        "category1",
        "category2"
    ],
    "designers": [
        {
            "name": "designerFirstName1 designerLastName1"
        },
        {
            "name": "designerFirstName2 designerLastName2"
        }
    ],
    "story": "Sphinx of black quartz, judge my vow! Sex-charged fop blew my junk TV quiz.",
    "foundryName": "foundryName1"
},
{
    "category": [
        "category2",
        "category3"
    ],
    "designers": [
        {
            "name": "designerFirstName1 designerLastName1"
        },
        {
            "name": "designerFirstName2 designerLastName2"
        }
    ],
    "story": "Sphinx of black quartz, judge my vow! Sex-charged fop blew my junk TV quiz.",
    "foundryName": "foundryName1"
},
{
    "category": [
        "category1",
        "category3"
    ],
    "designers": [
        {
            "name": "designerFirstName3 designerLastName1"
        },
        {
            "name": "designerFirstName2 designerLastName2"
        }
    ],
    "story": "Sphinx of black quartz, judge my vow! Sex-charged fop blew my junk TV quiz.",
    "foundryName": "foundryName1"
},
{
    "category": [
        "category2",
        "category3"
    ],
    "designers": [
        {
            "name": "designerFirstName3 designerLastName1" /*changed here comparing with the above document*/
        },
        {
            "name": "designerFirstName2 designerLastName2"
        }
    ],
    "story": "Sphinx of black quartz, judge my vow! Sex-charged fop blew my junk TV quiz.",
    "foundryName": "foundryName1"
},

0 ответов

Другие вопросы по тегам