0

주 쿼리가 있는데 두 개의 하위 쿼리에 대해 일치하는 숫자가 필요합니다. 솔로로 나는 facet.query이 필요합니다. 내가 누락 된 것은 value_count aggregation과 같은 간단한 doc_count 집합입니다.Elasticsearch의 쿼리를 통한 문서 수 집계 (solr의 facet.query와 유사)

제안 사항?

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" 
         } 
        } 
       } 
      } 
    } 
} 
    1. 사용 filter aggregationvalue_count 메트릭 _id에 함께 :

    예를

    는 내가 좋아하지 않는 두 가지 해결책을 발견 >
  1. 사용 Multi Search API
  2. (210)

예 :

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" }}} 

는 그 솔루션 (2) 빠른 볼 수 있지만 match_main 같은 복잡한 쿼리를 상상! value_count:{"field":"_id"} 대신 doc_count:{}이 있으면 솔루션 1을 선호합니다.

그러나 내 기본적인 질문으로 돌아가십시오 : elasticsearch에서 solr의 대응 부분은 무엇입니까 facet.query?

답변

1

이 경우 filters aggregation을 사용할 수 있습니다. 이미 언급 한 filter 집합과 다른 추가 s을 확인하십시오.

{ 
    "query": { 
    "match_all": {} 
    }, 
    "size": 0, 
    "aggs": { 
    "values": { 
     "filters": { 
     "filters": { 
      "value1": { 
      "bool": { 
       "should": [ 
       { 
        "match": { 
        "name": "fred" 
        } 
       }, 
       { 
        "term": { 
        "lastname": "krueger" 
        } 
       } 
       ] 
      } 
      }, 
      "value2": { 
      "term": { 
       "name": "freddy" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

"aggregations": { 
    "values": { 
    "buckets": { 
     "value1": { 
     "doc_count": 4 
     }, 
     "value2": { 
     "doc_count": 1 
     } 
    } 
    } 
} 

편집 같은 것을 반환합니다 일반적인 참고로, 당신은 당신의 버킷 집계에 통계 집계를 사용할 필요가 없습니다. 소그룹을 제공하지 않으면 문서 수만 확보하게됩니다. 이 경우 filters은 버킷을 제공하지만 복수 filter 집계도 함께 작동해야합니다.