Соответствующий запрос Elasticsearch во многих полях - PullRequest
0 голосов
/ 06 июля 2018

У меня есть несколько продуктов, хранящихся в индексе. Предполагая, что ниже приведен пример одного продукта:

'productID' => 'sandbag'
'productName' => 'Bag of sand'
'productDescription' => 'A bag of sand'
'sizes' => array
    0 =>
        'sizeID' => '1wht'
        'sizeName' => '1 lb white'
    1 =>
        'sizeID' => '1blk'
        'sizeName' => '1 lb black'
    2 =>
        'sizeID' => '2wht'
        'sizeName' => '2 lb white'
    3 =>
        'sizeID' => '2blk'
        'sizeName' => '2 lb black'

Запрос ElasticSearch черный 1 фунт вызывает этот продукт. Однако запрос черный 1 фунт песка не дает.

Если я заменю все пробелы на И, чтобы запрос стал черным, И 1, И фунтом, и песком , это произойдет, однако, похоже, что это приведет к уничтожению цитируемого запроса, такого как "1 фунт, черный" песок .

Мой запрос ElasticSearch выглядит так:

"query": {
    "query_string": {
        "query": "black 1 lb sand",
        "default_operator": "AND",
        "fields": ["productName", "sizes.sizeName"]
    }
}

В конечном итоге цель состоит в том, чтобы иметь возможность сопоставлять размеры и название продукта (и все, что я желаю) в одном запросе, а также поддерживать цитируемые фразы («1 фунт черного»), если клиент этого желает.

Я не хочу переключать оператора на ИЛИ, поскольку это приводит к слишком большому количеству продуктов.

Помощь

1 Ответ

0 голосов
/ 06 июля 2018

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

Просто установите для «type» значение «cross_fields», как указано в https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#multi-match-types

Таким образом, поисковый запрос становится:

"query": {
    "query_string": {
        "query": "black 1 lb sand",
        "default_operator": "AND",
        "type": "cross_fields",
        "fields": ["productName", "sizes.sizeName"]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...