Elasticsearch частичное соответствие порядка - PullRequest
0 голосов
/ 28 января 2019

Есть ли способ вернуть sku в порядке, с которого начинается поле, без добавления каких-либо дополнительных данных в индекс?

Пример поискового запроса: EXP-0931

Этовозвращение: NI-EXP-0931 в качестве первого результата, во втором - EXP-0931/03 / P

Мы хотим, чтобы продукты с EXP * были первыми, я пытался отключить нечеткость, ограничиваясь толькоУ поля sku и т. д. есть документы, которые не могут заставить работать постоянный запрос.

Отображение для моего поля sku:

"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256

Пример запроса POST

{
    "query": {
        "match": {"sku": "EXP"}
    }
}

Пример результата

{
    "took": 9,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 0.5989681,
        "hits": [
            {
                "_index": "magento2_en_catalog_product_20190202_000937",
                "_type": "product",
                "_id": "398925",
                "_score": 0.5989681,
                "_source": {
                    "sku": "NI-EXP-0931"
                }
            },
            {
                "_index": "magento2_en_catalog_product_20190202_000937",
                "_type": "product",
                "_id": "398923",
                "_score": 0.55341274,
                "_source": {
                    "sku": " EXP-0931/03/P"
                }
            }
        ]
    }
}

Использование отображения Shingle

 "sku": {
                                "type": "text",
                                "fields": {
                                    "untouched": {
                                        "type": "keyword"
                                    }
                                },
                                "copy_to": [
                                    "search",
                                    "spelling"
                                ],
                                "analyzer": "shingle"
                            },

1 Ответ

0 голосов
/ 01 февраля 2019

Если я правильно понял ваш вопрос, вы хотите найти что-то, что начинается с: EXP

Но вы получаете такие результаты, как: NI-EXP-0931, который не нужен.

Я рекомендую прочитать о токенизаторах , чтобы увидеть, как вы хотите токенизировать свои термины ... например, если вы используете Токенайзер пробельных символов , тогда ваш поисковый запрос NIC-EXP-0931 останется одним словом, но если вы используете Стандартный токенизатор , вы получите 3 токена (NIC, EXP, 0931) на тот же термин.

Если вы используете токенайзер пробела, тоNIC-EXP-0931 не должен возвращаться при поиске EXP-0931


Если вы хотите выполнить поиск по завершению (слова, начинающиеся с: EX ), тогдаПредлагаю прочитать о токен-фильтрах: N-Gram и Edge N-Gram токен-фильтры.Они сказали бы Elasticsearch, как выполнить поиск завершения для вас ...

Посмотрите на этот вопрос для некоторого примера и ссылок для создания подсказки завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...