Elasticsearch термин запрос с пробелами не работает - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь выполнить следующий запрос:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "Thing.Name": {
              "value": "(item) test",
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  }
}

Это не дает результатов, и я понятия не имею, почему. У меня есть параны и пробел. Какие у меня есть варианты?

1 Ответ

1 голос
/ 05 апреля 2019

Вы хотите соответствовать точному значению, для которого вы используете термин запрос. Как отметил Амит в комментарии, термин запрос не использует анализатор и, следовательно, он будет соответствовать документам, которые содержат точно такие же токены, которые необходимо изменить для отображения Thing.Name, как показано ниже:

{
  "Thing": {
    "properties": {
      "Name": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

Если сопоставление генерируется автоматически с помощью упругости, тогда оно будет иметь те же свойства для поля имени, что и выше. Если это уже так, вам не нужно вносить никаких изменений в отображение. Обновите свой запрос, чтобы использовать Thing.Name.keyword вместо Thing.Name, поскольку поле типа keyword не анализирует значение и не генерирует один токен, который является самим входным значением.

Итак, запрос будет:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "Thing.Name.keyword": {
              "value": "(item) test",
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...