2013-07-19 3 views
1

배경 : 내 ElasticSearch 지수에서ElasticSearch에서 누락 된 문서를 어떻게 확인할 수 있습니까?

, 나는 'bvi_ship'와 'bvi_notify'으로 식별 할 수있는 문서의 두 가지 유형이있다. 'bvi_ship'으로 식별 된 각 문서에는 'bvi_notify'로 식별 된 해당 문서가 있어야합니다.

질문 :

는 'bvi_notify'문서가없는 'bvi_ship'문서를 식별하는 적절한 방법은 무엇입니까?

{ 
    "size":0, 
    "query":{ 
     "filtered":{ 
     "query":{ 
      "query_string":{ 
       "default_operator":"OR", 
       "default_field":"_all", 
       "query":"@fields.action:\"bv_ship\" OR @fields.action:\"bvi_notify\"" 
      } 
     } 
     } 
    }, 
    "facets":{ 
     "terms":{ 
     "terms":{ 
      "field":[ 
       "@fields.object" 
      ], 
      "size":1000 
     } 
     } 
    } 
} 

다음과 같이 결과를 반환합니다 :

{ 
    "took" : 147, 
    ... 
    }, 
    "hits" : { 
    ... 
    }, 
    "facets" : { 
    "terms" : { 
     ... 
     "terms" : [ { 
     "term" : "xml", 
     "count" : 1443 
     }, { 
     "term" : "content_ff47d2d096ea4510ac0895941666e507", 
     "count" : 2 
     }, { 
     "term" : "content_fa525becb2724b7682df278c02fed308", 
     "count" : 2 
     }, 
     ... THOUSANDS OF RECORDS WITH COUNT of 2 
     }, { 
     "term" : "content_f1ff2f7440534a08bad4c62b92165949", 
     "count" : 1 
     } ] 
    } 
    } 
} 
을 나는 다음과 같은 측면 코드를 사용하여 필요한 문서를 식별 할 수있었습니다

: 패싯를 사용

일 수 있지만 분명히 t를 반환하고 싶지 않습니다. 카운트가 1 인 레코드에만 관심이있을 때 2의 카운트를 가진 레코드의 housands.

카운트가 1 인 레코드 만 반환하도록면 처리 된 검색을 제한하는 방법이 있습니까? ? 내가 내 쿼리에 구체적 할 수 있어야하고, 내 ElasticSearch 쿵푸가되고 있지만 단순히, 쿼리 및 필터의 조합을 사용하여 해당 레코드를 선택해야 같은데요

: 필터를 사용

내 Relational Database Karate에서 장애가 있습니다.

답변

0

'bvi_ship'개체가있는 레코드의 자식으로 'bvi_notify'개체를 사용하여 레코드를 인덱싱하는 것이 가장 좋은 방법이라고 생각합니다. 그러면 bool 필터의 must_not 절에서 has_child 필터를 사용하여 해당 'bvi_notify'객체가없는 'bvi_ship'문서를 모두 찾을 수 있습니다.

원래 질문에 대답하려면 개수가 1 인 용어만으로 제한하는 방법은 없지만 reverse_count 순서를 사용하여 패싯을 정렬하면 1이라는 수의 모든 용어가 명부. 그러나, 1 개 이상의 샤드가 있다면, 당신이 당신의 패싯에서 얻는 카운트는 입니다. 이것이 내가 패싯 대신 부모/자식 솔루션을 사용하는 것을 권장하는 또 다른 이유입니다.

+0

부모/자식 관계에 대해 생각해 보았지만 불행히도 기본 매개 변수를 제공하는 것 이상의 문서 인덱싱 방법을 직접 제어 할 수는 없습니다. reverse_count에 대한 아이디어를 주셔서 감사합니다. –

관련 문제