Запросы на уровне термина в Elasticsearch: terms запрос

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

Запрос terms такой же, как term запрос, за исключением того, что вы можете искать несколько значений.

Пример запроса

Следующий поиск возвращает документы, в которых поле user.id содержит kimchy или elkbee.

GET /_search
{
  "query": {
    "terms": {
      "user.id": [ "kimchy", "elkbee" ],
      "boost": 1.0
    }
  }
}

Параметры верхнего уровня для terms запроса

field

(Обязательный, объект) Поле для поиска.

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

По умолчанию Elasticsearch ограничивает количество запросов до 65536 терминов. Вы можете изменить это ограничение с помощью параметра index.max_terms_count.

Чтобы использовать значения полей существующего документа в качестве условий поиска, используйте параметры поиска терминов (terms lookup), описанные ниже.

boost

(Необязательный, число с плавающей запятой) Число с плавающей запятой, используемое для уменьшения или увеличения оценок релевантности запроса. По умолчанию 1.0.

Вы можете использовать параметр boost для корректировки оценок релевантности для поисков, содержащих два или более запросов.

Значения boost относятся к значению по умолчанию 1.0. Значение boost от 0 до 1.0 снижает оценку релевантности. Значение больше 1.0 увеличивает оценку релевантности.

Поиск терминов (Terms lookup)

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

Поскольку поиск терминов извлекает значения из документа, для использования поиска терминов необходимо включить поле сопоставления _source. Поле _source включено по умолчанию.

По умолчанию Elasticsearch ограничивает количество запросов до 65536 терминов. Сюда входят термины, полученные с помощью поиска терминов. Вы можете изменить это ограничение с помощью параметра index.max_terms_count.

Чтобы выполнить поиск терминов, используйте следующие параметры.

Параметры поиска терминов

index

(Обязательный, строка) Имя индекса, из которого нужно получить значения поля.

id

(Обязательный, строка) ID документа, из которого нужно получить значения полей.

path

(Обязательный, строка) Имя поля, из которого нужно получить значения поля. Elasticsearch использует эти значения в качестве терминов поиска для запроса.

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

routing

(Необязательный, строка) Пользовательское значение маршрутизации документа, из которого нужно получить значения терминов. Если при индексировании документа было указано значение настраиваемой маршрутизации, этот параметр является обязательным.

Пример поиска терминов

Чтобы увидеть, как работает поиск терминов, попробуйте следующий пример.

1. Создайте индекс с полем ключевого слова с именем color.

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "color": { "type": "keyword" }
    }
  }
}

2. Проиндексируйте документ с идентификатором 1 и значениями ["blue", "green"] в поле color.

PUT my-index-000001/_doc/1
{
  "color":   ["blue", "green"]
}

3. Проиндексируйте другой документ с идентификатором 2 и значением blue в поле color.

PUT my-index-000001/_doc/2
{
  "color":   "blue"
}

4. Используйте terms запрос с параметрами поиска терминов, чтобы найти документы, содержащие один или несколько из тех же терминов, что и документ 2. Включите параметр pretty, чтобы ответ был более читабельным.

GET my-index-000001/_search?pretty
{
  "query": {
    "terms": {
        "color" : {
            "index" : "my-index-000001",
            "id" : "2",
            "path" : "color"
        }
    }
  }
}

Поскольку документ 2 и документ 1 содержат значение blue в поле color, Elasticsearch возвращает оба документа.

{
  "took" : 17,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my-index-000001",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "color" : [
            "blue",
            "green"
          ]
        }
      },
      {
        "_index" : "my-index-000001",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "color" : "blue"
        }
      }
    ]
  }
}


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Хэш-таблица: разрешение коллизий

Нормальные формы, пример нормализации в базе данных