Разница между полем и field.keyword

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

some_field

а другой будет называться

some_field.keyword

Откуда происходит это поведение и в чем разница между ними обоими?

PS: один из них является агрегируемым (не уверен, что это значит), а другой (без ключевого слова) нет.

3 ответа

Обновление: краткий ответ будет такого типа: текст анализируется, что означает, что при хранении он разбивается на отдельные слова и позволяет осуществлять поиск в произвольном тексте по одному или нескольким словам в поле. Поле.keyword принимает те же данные и хранится как одна большая строка, что означает, что она может быть агрегирована, и вы можете использовать поиск по ней по шаблону. Агрегируемый означает, что вы можете использовать его в агрегатах в эластичном поиске, который напоминает группу SQL, если вы знакомы с этим. В Кибане вы, вероятно, использовали бы поле.keyword с агрегатами для подсчета различных значений и т. Д.


Пожалуйста, посмотрите на эту статью о text противkeyword,

Вкратце: начиная с Elasticsearch 5.0 string тип был заменен на text а также keyword типы. С тех пор, когда вы не указываете явное отображение, для простого документа со строкой:

{
  "some_field": "string value"
}

ниже будет создано динамическое отображение:

{
  "some_field": {
    "type" "text",
    "fields": {
      "keyword": {
        "type": "keyword",
        "ignore_above": 256
      }
    }
  }
}

Как следствие, оба будут иметь возможность выполнять полнотекстовый поиск на some_fieldи поиск по ключевым словам и агрегации с использованием some_field.keyword поле.

Надеюсь, это ответит на ваш вопрос.

Посмотри на эту проблему. В этом есть объяснение вашего вопроса. Грубо говоря some_field анализируется и может быть использован для полнотекстового поиска. С другой стороны some_filed.keyword не анализируется и может использоваться в терминах запросов или в агрегации.

Я постараюсь ответить на ваши вопросы один за другим. Откуда такое поведение? Он представлен в Elastic 5.0.

Какая разница между двумя?some_field используется для полнотекстового поиска, а some_field.keyword используется для поиска по ключевым словам. Полнотекстовый поиск используется, когда мы хотим включить в поиск отдельные токены значения поля. Например, если вы ищете все названия отелей, в которых есть слово «ферма», например, дом на ферме сена, дом на ферме в гавани Уинди и т. д.

Поиск по ключевым словам используется, когда мы хотим включить в поиск все значение поля, а не отдельные токены из значения. Например, предположим, что вы индексируете документы на основе поля города. Агрегирование на основе этого поля будет иметь отдельный подсчет для «новый» и «йоркский» вместо «нью-йоркского», что обычно является ожидаемым поведением.

Начиная с Elastic 5.0, строки теперь будут отображаться как ключевое слово и как текст по умолчанию.

Другие вопросы по тегам