Есть ли способ определить тип атрибута как ключевое слово в типе данных ElasticSearch Array? - PullRequest
0 голосов
/ 30 января 2019

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

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

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

Текущее поведение: по-разному хранит привет и мир по-разному.

1 Ответ

0 голосов
/ 30 января 2019

Нет типа данных для массива в упругом поиске.Всякий раз, когда вы отправляете массив как значение свойства типа 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"]
}
...