Запрос терминов Elasticsearch работает только с полем _id

#elasticsearch

#elasticsearch

Вопрос:

Я пытался выполнить эквивалент запроса IN. Самый простой метод, который я нашел для иллюстрации проблемы, заключается в следующем:

ПОЛУЧИТЬ {URL}/index/_search

 {
  "query": {
    "terms": {
      "id": [ "0b54ffc1-cea9-4e5d-9766-559720621922", "0658115e-60b3-439d-9f1a-343ab914806b"],
      "boost": 1.0
    }
  }
}
 

Это не возвращает мне никаких обращений, хотя у меня есть документы с этими полями идентификаторов.
Однако, если я использую _id, который для этого индекса одинаков, я получаю результаты, т. Е.

 {
  "query": {
    "terms": {
      "_id": [ "0b54ffc1-cea9-4e5d-9766-559720621922", "0658115e-60b3-439d-9f1a-343ab914806b"],
      "boost": 1.0
    }
  }
}
 

На самом деле я хочу использовать совершенно другое поле, которое ‘user.id ‘(я индексирую вложенное поле firebase), это тоже не работает, но приведенный выше пример особенно сбивает с толку.

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

Спасибо за любую помощь!

Dan

введите описание изображения здесь

Ответ №1:

если вы проверите свое сопоставление, ваше id поле может иметь тип text . У вас может быть вызванное подполе id.keyword , которое имеет тип keyword , и если это так, вы можете достичь того, что вам нужно, используя вместо этого это подполе:

 {
  "query": {
    "terms": {
      "id.keyword": [ "0b54ffc1-cea9-4e5d-9766-559720621922", "0658115e-60b3-439d-9f1a-343ab914806b"],
      "boost": 1.0
    }
  }
}