Как найти числа с запятой в Elasticsearch? - PullRequest
0 голосов
/ 21 февраля 2019

Номер запроса, как показано ниже, не дает никакого результата, но пробел после запятых он может найти.

Пример данных:

{
  "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 Ответ

0 голосов
/ 22 февраля 2019

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

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 .

...