우리는 사용자가 범주로 나눌 필터 세트와 탄성 검색 결과를 필터링 할 수 있습니다 :Elastic Search 집계를 사용하여 쿼리 필터링 논리를 미러링하는 방법은 무엇입니까? 우리의 사이트에
A
A1
A2
...
B
B1
B2
B3
...
이이처럼 문서의 필드에 나타날 수있는 문자 태그에 일치됩니다
사용자가 선택하면A1
,
B1
및
B2
, 우리가
(A1 AND B1 AND B2)
기준으로 필터링 할 수 있도록
{ tags: ["A1", "B1", "B2"] }
우리의 기존 조회는 아래의 모든 필터 조건을 조인합니다.
(A1) AND (B1 OR B2)
을 얻을 수 있도록이 항목을 "각 필터 범주 내 OR"및 "AND 범주"로 변경하고 싶습니다.
이제 주름 : "태그"필드에 "용어"집계를 사용하여 다음 필터 적용에서 몇 개의 항목이 다시 나타날지 예측합니다. 용어 집계는 여전히 A1 AND B1 AND B2
을 예측하기 때문에
A
A1 12 # If the user adds the A1 filter, there'll be 12 results.
A2 3 # etc.
...
B
B1 5
B2 0
B3 2
...
가, AND에 필터 로직을 변경/OR 다시 "용어"통합에서 오는 수를 나눈 것 같은 우리의 UI에서이 보인다. B3
을 추가하면 우리는 A1 AND B1 AND B2 AND B3
을 얻게되고 결과에서 실제로 범위를 넓히지 만 (즉, (A1) AND (B1 OR B2 OR B3)
) 집계에서 카운트를 좁히게됩니다.
필터링 논리와 집계 횟수가 일치하도록 집계에서이를 표현하는 방법이 있습니까?
재미있는 - 그래서 나는 등 (현재 필터 + A1), (현재 필터 + A2), 각각의 가능한 다음 필터처럼 뭔가를 보내야하는 것 ? 우리는 5 ~ 6 천 개가 넘는 문서를 운영하는 수백 개의 필터를 보유하고 있습니다. – user1454265
내가 말했듯이, 당신이 "다음"필터를 만들 필요가있는 많은 다른 태그 (용어)가있을 때 이것이 좋은 해결책인지 확실하지 않습니다. Elasticsearch는 필터를 캐싱하고 재사용 할 때 큰 역할을하므로 시도해 볼 수는 있습니다. 5 천 6 천 명도 그다지 많은 문서가 아닙니다. 그것은 집계를 구성하고 나중에 수동으로 결과를 추출하는 방법에 관한 것입니다. 아마도 모든 결과를 한 번에 표시하지 않는 방법이있을 것입니다. –
감사합니다.이 접근 방식은 현재 작동하고 있습니다 (ES 1.7). 나는 어딘가에 (우리의 스택에있을 수있는) 어딘가에 부딪혀서 ~ 200 버킷으로 내 필터 집계를 제한하고있다. – user1454265