Фильтр запроса / термин Elasticseach не работает, когда используются специальные символы - PullRequest
0 голосов
/ 06 августа 2020

Следующий запрос не работает, если "metadata.name" имеет "-" в тексте, таком как "demo-application-child3". Но если я уберу «-» и сделаю запрос к «demoapplicationchild3». Оно работает. То же самое и с другим полем metadata.version. У меня есть данные для demoapplicationchild3 и demo-application-child3. предложения пожалуйста.

 {
      "query": {
        "bool": {
          "filter": [
          {"term": { "metadata.name": "demo-application-child3" }},
          {"term": { "metadata.version": "00.00.100" }}]
        }
      }
    }

1 Ответ

0 голосов
/ 06 августа 2020

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

Возвращает документы, содержащие точный термин в указанном поле.

Это явно означает, что во время индексации вы используете какой-то пользовательский анализатор, который удаляет - и присоединяет токены ie к demo-application-child3, ваш пользовательский анализатор будет генерировать токен demoapplicationchild3, что вы можете легко подтвердить. используя Analyze api .

Если вы хотите получить результат, измените запрос term на запрос match или используйте суффикс .keyword с вашим полем, если сопоставление создается динамически или создайте другое поле типа ключевое слово , которое использует анализатор без операций.

...