2013-03-07 5 views
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" : {...} 
} 

И все в порядке. Но то, что мне нужно, - это получить владельцев с их адресами электронной почты (для каждой записи в фасет мне нужно дополнительное поле в результатах). Возможно ли это?

ответ

4

Невозможно, я думаю? В зависимости от ваших потребностей, я бы

  1. Создать составное поле и с именем & электронной почтой и сделать фаску на этом поле, или
  2. Выполните запрос в дополнении к фаске и извлечь его из запроса-результата , но это, очевидно, не масштабируемо.
  3. Два шаговых операции, получить грань, построить необходимые запросы и слить результаты.
+0

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

Смежные вопросы