Массив строк 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" }
}
}
}
}
}