Массив строк Elasticsearch, токенизируемый даже с no_analyzed в отображении

Это сводит меня с ума. У меня есть несколько массивов в моих данных, вот уменьшенная версия:

{
"fullName": "Jane Doe",
"comments": [],
"tags": [
    "blah blah tag 1",
    "blah blah tag 1"
],
"contactInformation": {
    "attachments": [
        "some file 1",
        "some file 2",
        "some file 3"
    ]
}
}

Итак, мои сопоставления в asticsearch следующие:

curl -XPOST localhost:9200/myindex -d '{
"settings" : {
    "number_of_shards" : 1
},
"mappings" : {
    "docs" : {
        "properties" : {
            “tags” : { "type" : "string", "index" : "not_analyzed" }
            “attachments” : { "type" : "string", "index" : "not_analyzed" }
        }
    }
}
}'

Теперь, если я отображаю их как фасеты, теги выглядят нормально, вот так:

[ ] - бла-бла-тег 1

[ ] - бла-бла-тег 2

Тем не менее, вложения маркированы, и я получаю фасет для каждого слова, т.е.

[ ] - немного

[ ] - файл

[ ] - 1

Я думал, так как свойство attachments находится внутри contactInformation, мое отображение может выглядеть следующим образом: "contactInformation.attachments": {"type": "string", "index": "not_analyzed"}

Но это бросило ошибку, не ожидая точку.

Есть идеи?

1 ответ

Решение

См. Документацию "Сложные основные типы полей" (в частности, раздел "Отображение для внутренних объектов").

Это должно выглядеть примерно так:

"mappings" : {
  "docs" : {
    "properties" : {
      “tags” : { "type" : "string", "index" : "not_analyzed" },
      "contactInformation": {
        "type": "object",
        "properties": {
          “attachments” : { "type" : "string", "index" : "not_analyzed" }
        }
      }
    }
  }
}
Другие вопросы по тегам