Ich habe eine Hauptabfrage und ich brauche die Anzahl der Übereinstimmungen für ein paar Unterabfragen. In solr Worten brauche ich eine facet.query. Was mir fehlt ist eine einfache doc_count
Aggregation wie die value_count aggregation.Belegzählung Aggregation über Abfrage in Elasticsearch (wie facet.query in solr)
Irgendwelche Vorschläge?
fand ich zwei mögliche Lösungen, die Ich mag nicht:
- Verwenden filter aggregation mit value_count Metrik auf
_id
:
Beispiel:
GET _search
{
"query": {
"match_main": {}
},
"aggs": {
"facetvalue1": {
"filter": {
"bool": {
"should": [
{"match": { "name": "fred" }},
{"term": { "lastname": "krueger" }}
]
}
},
"aggs": {
"count": {
"value_count": {
"field": "_id"
}
}
}
},
"facetvalue2": {
"filter": {
"term": { "name": "freddy" }
},
"aggs": {
"count": {
"value_count": {
"field": "_id"
}
}
}
}
}
}
- Verwenden Sie Multi Search API
Beispiel:
GET _msearch
{"index":"myindex"}
{"query":{"match_main": {}}}
{"index":"myindex"}
{"size": 0, "query":{"match_main": {}}, "filter": {"bool": {"should":[{"match": { "name": "fred" }},{"term": { "lastname": "krueger" }}]}}}
{"index":"myindex"}
{"size": 0, "query":{"match_main": {}},"filter": {"term": { "name": "freddy" }}}
Ich sehe, dass die Lösung 2 schneller ist, aber match_main
als komplexe Abfrage vorstellen! Also würde ich Lösung 1 bevorzugen, wenn es eine doc_count:{}
anstelle von value_count:{"field":"_id"}
geben würde.
Aber zurück zu meiner Grundfrage: Was ist das Gegenstück zum Solr facet.query
in elasticsearch?