Есть ли способ определить тип атрибута как ключевое слово в типе данных ElasticSearch Array?

Я работаю над индексированием большого набора данных, который имеет несколько полей имен для определенного объекта. Я определил поле имени массива типов и добавляю в него около 4 имен. Между некоторыми именами есть пробелы, и они токенизируются. Могу ли я этого избежать?

Я знаю, что для String у нас есть текст, а также тип ключевого слова в Elastic, но как мне определить тип как ключевое слово, когда у меня есть массив в качестве типа данных? По умолчанию все поля массива имеют текстовый тип. Я хочу, чтобы они рассматривались как тип ключевого слова, чтобы они не токенизировались при индексировании.

Ожидается: если я сохраню «Hello World» в массиве, я смогу выполнить поиск «Hello World».

Текущее поведение: он хранит приветствие по-другому и мир по-другому, поскольку он токенизирует это.


person Divyesh Kalbhor    schedule 30.01.2019    source источник


Ответы (1)


В эластичном поиске нет типа данных для массива. Всякий раз, когда вы отправляете массив как значение свойства типа x, это свойство становится массивом, принимающим только значения типа x.

Так, например, вы создали свойство, как показано ниже:

{
   "tagIds": {
      "type": "integer"
   }
}

И вы индексируете документ со значениями, как показано ниже:

{
   "tagIds": [124, 452, 234]
}

Тогда tagIds автоматически станет массивом целых чисел.

В вашем случае все, что вам нужно сделать, это создать поле, скажем, name с типом keyword. И убедитесь, что вы всегда передаете массив в это поле, даже если оно должно содержать одно значение, чтобы убедиться, что это всегда массив. Ниже то, что вам нужно: Отображение:

PUT test
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "keyword"
        }
      }
    }
  }
}

Индексация документа:

PUT test/_doc/1
{    
    "name" : ["name one"]
}
person Nishant    schedule 30.01.2019
comment
имя с типом в качестве ключевого слова и передача массива сработали! Спасибо. - person Divyesh Kalbhor; 31.01.2019