2
я следующие индекс:Множественные свойства в фасетов (elasticsearch)
curl -XPUT "http://localhost:9200/test/" -d '
{
"mappings": {
"files": {
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
},
"owners": {
"type": "nested",
"properties": {
"name": {
"type":"string",
"index":"not_analyzed"
},
"mail": {
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
}
}
'
С образцами документов:
curl -XPUT "http://localhost:9200/test/files/1" -d '
{
"name": "first.jpg",
"owners": [
{
"name": "John Smith",
"mail": "[email protected]"
},
{
"name": "Joe Smith",
"mail": "[email protected]"
}
]
}
'
curl -XPUT "http://localhost:9200/test/files/2" -d '
{
"name": "second.jpg",
"owners": [
{
"name": "John Smith",
"mail": "[email protected]"
},
{
"name": "Ann Smith",
"mail": "[email protected]"
}
]
}
'
curl -XPUT "http://localhost:9200/test/files/3" -d '
{
"name": "third.jpg",
"owners": [
{
"name": "Kate Foo",
"mail": "[email protected]"
}
]
}
'
И мне нужно, чтобы найти всех владельцев, которые соответствуют какой-то запрос, скажем «мит» :
curl -XGET "http://localhost:9200/test/files/_search" -d '
{
"facets": {
"owners": {
"terms": {
"field": "owners.name"
},
"facet_filter": {
"query": {
"query_string": {
"query": "*mit*",
"default_field": "owners.name"
}
}
},
"nested": "owners"
}
}
}
'
Это дает мне следующий результат:
{
"facets" : {
"owners" : {
"missing" : 0,
"_type" : "terms",
"other" : 0,
"total" : 4,
"terms" : [
{
"count" : 2,
"term" : "John Smith"
},
{
"count" : 1,
"term" : "Joe Smith"
},
{
"count" : 1,
"term" : "Ann Smith"
}
]
}
},
"timed_out" : false,
"hits" : {...}
}
И все в порядке. Но то, что мне нужно, - это получить владельцев с их адресами электронной почты (для каждой записи в фасет мне нужно дополнительное поле в результатах). Возможно ли это?
Спасибо за ваши советы. Я пробовал уже составное поле, и я думаю, что это лучший способ, потому что я хочу избежать слишком большого количества запросов и обработки. Ура! –