Доброго времени суток!
Упражняюсь с doc value - не получается правильно их зафильтровать.
Задача найти документ соответствующий запросу и отфильтрованными полем.
Т.е. делаю индекс:
{
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
},
"mappings" : {
"docs" : {
"properties" : {
"name" : { "type" : "text"},
"user" : {
"properties" : {
"nickname" : { "type" : "keyword" },
"level" : { "type" : "integer" }
}
}
}
}
}
}
Добавляю документ 1:
{
"group" : "Alfa",
"user" : [
{ "nickname" : "Keken", "level" : 1 },
{ "nickname" : "Elias", "level" : 80 },
{ "nickname" : "Grey", "level" : 2 },
{ "nickname" : "GreenX", "level" : 80 }
]
}
Добавляю документ 2:
{
"group" : "alfa beta",
"user" : [
{ "nickname" : "Ken", "level" : 1 },
{ "nickname" : "Barbie", "level" : 2 },
{ "nickname" : "Chalsiea", "level" : 3 }
]
}
Добавляю документ 3:
{
"group" : "Blacks",
"user" : [
{ "nickname" : "K", "level" : 80 },
{ "nickname" : "M", "level" : 3 },
{ "nickname" : "J", "level" : 80 }
]
}
Далее хочу получить группу со словом "alfa" в названии со списком ников 80 левела.
{
"docvalue_fields" : [ "user", "user.level" , "user.nickname"],
"_source" : false,
"query" : {
"bool" : {
"must" : {
"match": {
"group" : "alfa"
}
},
"filter" : {
"term" : { "user.level" : 80}
}
}
}
}
Получаю:
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.52354836,
"hits" : [
{
"_index" : "test4",
"_type" : "docs",
"_id" : "AWJl7jZzTjWVRbbbLEY4",
"_score" : 0.52354836,
"fields" : {
"user.level" : [
1,
2,
80,
80
],
"user.nickname" : [
"Elias",
"GreenX",
"Grey",
"Keken"
]
}
}
]
}
}
Т.е. в идеале, я хотел бы получить, что-то вроде:
{
{
"_id" : 1
"user" [ "Elias","GreenX" ]
}
}
Но не получается...
- Не получилось получить целый объект. Только плоские массивы.
- Найден правильный документ, но не нужные значения не отфильтровались.
- Значения в массивах упорядочены по возрастанию, а не так как были. Т.е. их даже дальше в программе не разобрать.
Подскажите, как правильно решают такие задачи?