Как найти числа с запятой в Elasticsearch?
Номер запроса, как показано ниже, не дает никакого результата, но пробел после запятых он может найти.
Пример данных:
{
"data":"34543,2525,5674,879"
}
Запрос:
"query": {
"query_string" : {
"query" : "(data:2525)"
}
}
Настройки:
"analysis":{
"filter":{
"my_ascii_folding":{
"type":"asciifolding",
"preserve_original":"true"
}
},
"analyzer":{
"default":{
"filter":[
"lowercase",
"my_ascii_folding"
],
"char_filter":[
"html_strip"
],
"tokenizer":"standard"
}
}
}
Например, запрос 2525
в "34543, 2525, 5674, 879"
нашел, но с "34543,2525,5674,879"
не находит
1 ответ
Без дополнительной информации, похоже, вы используете стандартный токенизатор. Вы можете показать, как анализируются ваши токены, используя
GET users/_analyze
{
"text": "34543, 2525, 5674, 879"
}
или же
GET users/_analyze
{
"text": "34543,2525,5674,879"
}
Если вы используете стандартный токенизатор, то 34543,2525,5674,879 - это только один токен в вашем инвертированном индексе. Когда вы ищете 2525, он не будет соответствовать этому токену. С другой стороны, 3453, 2525, 5674, 879 разбиты на четыре токена без запятых. 2525 соответствует второму токену.
Если вы хотите решить эту проблему, вам нужно использовать другой токенайзер, который всегда токенизирует запятую, а не только когда он находится в начале или конце токена. Индексирование поля значения через запятую в Elastic Search.