У меня есть требование, когда ожидается получение результатов для частичного соответствия любого ключевого слова / термина, введенного в любом порядке.
Чтобы быть более понятным, ниже приведен пример индекса,
Я пытался использовать токен "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, это не принесет "автомобили" при поиске
"Автомобиль".
Пожалуйста, посоветуйте решение для сценария и требования.
Простое требование в одну строку заключается в том, чтобы в результатах отображалось частичное совпадение ключевых слов / поисковых терминов в любом порядке.
Большое спасибо заранее.