ElasticSearch - частичное совпадение с несколькими фразами / поисковыми терминами - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть требование, когда ожидается получение результатов для частичного соответствия любого ключевого слова / термина, введенного в любом порядке.

Чтобы быть более понятным, ниже приведен пример индекса,

Я пытался использовать токен "letter" и "пробел" тоже.

PUT test_index
{
    "settings": {
        "analysis": {
            "analyzer": {
                "custom_analyzer": {
                    "type": "custom",
                    "tokenizer": "letter",
                    "char_filter": [
                        "html_strip"
                    ],
                    "filter": ["lowercase", "asciifolding"]
                }
            }
        }
    },

    "mappings": {
        "doc": {
            "properties": {
                "keyword": {
                    "type": "text",
                    "analyzer": "custom_analyzer"
                }

            }
        }
    }
}

И я вставил ниже образец данных,

{
"id":1,
"keyword":"blue car"
},
{
"id":2,
"keyword":"blue cars"
},
{
"id":3,
"keyword":"red can"
},
{
"id":4,
"keyword":"control device"
},
{
"id":5,
"keyword":"controlled pressure"
},
{
"id":6,
"keyword":"controller app"
}

Когда я использую нечеткий запрос, как показано ниже,

GET test_index/_search
{
    "query": {
        "fuzzy" : {
            "keyword" : {
                "value": "car",
                "boost": 1.0,
                "fuzziness": 2,
                "prefix_length": 0,
                "max_expansions": 100
            }
        }
    }
}
  • Я получаю 2 результата: "синяя машина" и "красная банка", что нежелательно. Если Я установил prefix_length = 3, это работает.
  • Но то же самое не будет работать с более длинными словами. Например, «контроллер» принесет 2 результата из вышеупомянутого индекса "контроллер приложения" и «контролируемое давление».
  • Если я увеличу prefix_length, это не принесет "автомобили" при поиске "Автомобиль".

Пожалуйста, посоветуйте решение для сценария и требования.

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

Большое спасибо заранее.

...