Как найти числа с запятой в 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" не найден.


person nikli    schedule 21.02.2019    source источник
comment
Как анализируются ваши поля?   -  person Yeikel    schedule 21.02.2019
comment
Я добавил, токенизатор стандартный   -  person nikli    schedule 22.02.2019


Ответы (1)


Без дополнительной информации похоже, что вы, вероятно, используете стандартный токенизатор. Вы можете показать, как анализируются ваши токены, используя

GET users/_analyze
{
  "text": "34543, 2525, 5674, 879"
}

or

GET users/_analyze
{
  "text": "34543,2525,5674,879"
}

Если вы используете стандартный токенизатор, то 34543 2525 5674 879 — это только один токен в вашем инвертированном индексе. Когда вы ищете 2525, он не будет соответствовать этому токену. С другой стороны, 3453, 2525, 5674, 879 разбиваются на четыре токена без запятых. 2525 соответствует второму токену.

Если вы хотите решить эту проблему, вам нужно использовать другой токенизатор, который всегда ставит токен на запятую, а не только в начале или конце токена Индексирование поля значений, разделенных запятыми, в Elastic Search.

person Kosi    schedule 21.02.2019
comment
Я добавил информацию о токенизаторе. Как я могу токенизировать запятую? - person nikli; 22.02.2019
comment
Я добавил ссылку на stackoverflow.com/questions/31143136/. Это должно ответить на ваш вопрос. - person Kosi; 22.02.2019