У меня есть буквенно-цифровые коды, такие как Hcc18, HCC23, I23, которые я хочу сохранить в ElasticSearch. Над этим я хочу построить следующие две функции: -
- Пользователь может искать полный буквенно-цифровой код или только целую часть.
Пример: для hcc15 или 15 hcc15 должен быть в выходных данных и в верхней части результатов. - Функция автозаполнения: когда пользователь вводит, скажем, I42, результаты должны содержать I420, I421 и т. д.
Мое текущее сопоставление Elasticsearch:
"mappings": {
"properties": {
"code": {
"type": "text",
"analyzer": "autoanalyer"
}
}
},
"settings": {
"analysis": {
"analyzer": {
"autoanalyer": {
"tokenizer": "standard",
"filter": [
"lowercase",
]
}
},
"tokenizer": {
"autotoken": {
"type": "simple_pattern",
"pattern": "[0-9]+"
}
}
}
}
Делается запрос:
{
"min_score": 0.1,
"from": 0,
"size": 10000,
"query": {
"bool": {
"should": [{ "match": {"code": search_term}}]
}
}
}
Две проблемы, с которыми я сталкиваюсь при таком подходе: -
Допустим, я ищу I420, теперь, поскольку сопоставление основано только на цифрах, я получаю все коды, относящиеся к числу 420, но точное совпадение I420 не приходит на вершине.
Будет ли это сопоставление, как я смогу реализовать вышеупомянутую функцию автозаполнения.
E115
, я получаю такие результаты, как E1151, E1151, E1153, что именно то, что я хочу. Но тогда ищу 115 вместо Е115 результата нет. Поэтому для меня не имеет значения, набирает ли пользователь E115 или просто 115. Функция автозаполнения должна работать и с числами. - person Abhimanyu   schedule 02.04.2020