본문 바로가기
WIKI 기술 지식 베이스

Hybrid search with post-filtering

원문 보기 위키 갱신

출처: 문서

본문

포스트 필터링을 사용한 하이브리드 검색

Introduced 2.13 {: .label .label-purple }

쿼리에 post_filter 매개변수를 제공하여 하이브리드 검색 결과에 포스트 필터링을 수행할 수 있어요.

post_filter 절은 검색 결과가 검색된 후에 적용돼요. 포스트 필터링은 결과의 점수나 순서에 영향을 주지 않고 검색 결과에 추가 필터를 적용하는 데 유용해요.

포스트 필터링은 집계 결과에 영향을 주지 않아요. {: .note}

최종 결과를 필터링하는 대신 쿼리 실행 중에 모든 하위 쿼리를 필터링하려면 공통 필터를 사용하세요. 자세한 내용은 사전 필터링을 사용한 하이브리드 검색을 참조하세요.

예: 포스트 필터링을 사용한 패싯 검색

포스트 필터링은 UI가 검색 결과와 함께 집계 개수(예: 브랜드, 색상, 크기 필터)를 표시하는 패싯 검색에서 일반적으로 사용돼요. post_filter를 사용하면 표시된 결과만 필터링하면서 전체 필터링되지 않은 쿼리를 기반으로 집계 개수를 유지해요.

제품 문서를 포함하는 인덱스를 고려해 보세요.

{
  "name": "Nike Air Max",
  "brand": "Nike",
  "color": "Red",
  "size": 10,
  "price": 120,
  "category": "Running Shoes"
}

사용자가 "running shoes"를 검색하고, 애플리케이션이 브랜드, 색상, 크기에 대한 집계를 포함하는 쿼리를 구성해요.

POST /products/_search
{
  "query": {
    "match": {
      "category": "running shoes"
    }
  },
  "aggs": {
    "brands": {
      "terms": { "field": "brand.keyword" }
    },
    "colors": {
      "terms": { "field": "color.keyword" }
    },
    "sizes": {
      "terms": { "field": "size" }
    }
  }
}

{% include copy-curl.html %}

응답은 모든 브랜드의 결과를 반환해요.

Nike Air Max
Nike Pegasus
Adidas Adizero
Puma Velocity
...

응답은 또한 모든 브랜드, 색상, 크기에 대한 개수를 포함하는 집계를 반환해요.

Brands:  Nike (120), Adidas (80), Puma (45)
Colors:  Black (90), White (70), Red (55)
Sizes:   8 (40), 9 (60), 10 (85)

집계는 일반적으로 UI에서 패싯 필터로 표시돼요. 사용자가 특정 브랜드(예: Nike)를 선택하여 결과를 필터링할 때, 사전 필터를 사용하면 집계가 계산되기 전에 Nike가 아닌 문서가 제외되어 다른 브랜드가 패싯 개수에서 사라지게 돼요.

post_filter를 사용하면 쿼리와 집계가 전체 결과 집합에 대해 실행돼요. 필터는 표시된 결과에만 적용돼요.

POST /products/_search
{
  "query": {
    "match": {
      "category": "running shoes"
    }
  },
  "aggs": {
    "brands": {
      "terms": { "field": "brand.keyword" }
    },
    "colors": {
      "terms": { "field": "color.keyword" }
    }
  },
  "post_filter": {
    "term": { "brand.keyword": "Nike" }
  }
}

{% include copy-curl.html %}

결과에는 Nike 제품만 포함되지만, 집계는 여전히 전체 필터링되지 않은 쿼리를 반영해요.

Brands:  Nike (120), Adidas (80), Puma (45)
Colors:  Black (90), White (70), Red (55)

모든 브랜드 옵션이 패싯에 계속 표시되어, 사용자가 필터를 제거하지 않고도 브랜드를 전환하거나 개수를 비교할 수 있어요.

포스트 필터링이 검색 결과와 점수에 미치는 영향

포스트 필터링은 최종 검색 결과와 문서 점수를 크게 변경할 수 있어요. 다음 시나리오를 고려해 보세요.

단일 쿼리 시나리오

다음 결과를 반환하는 쿼리를 고려해 보세요.

  • 정규화 전 쿼리 결과: [d2: 5.0, d4: 3.0, d1: 2.0]
  • 정규화된 점수: [d2: 1.0, d4: 0.33, d1: 0.0]

초기 쿼리 결과에 포스트 필터를 적용한 후 결과는 다음과 같아요.

  • 포스트 필터 일치: [d2, d4]
  • 결과 점수: [d2: 1.0, d4: 0.0]

포스트 필터를 적용한 후 문서 d4의 점수가 0.33에서 0.0으로 변경되는 것을 확인하세요.

다중 쿼리 시나리오

두 개의 하위 쿼리가 있는 쿼리를 고려해 보세요.

  • 쿼리 1 결과: [d2: 5.0, d4: 3.0, d1: 2.0]
  • 쿼리 2 결과: [d1: 1.0, d5: 0.5, d4: 0.25]
  • 정규화된 점수:
    • 쿼리 1: [d2: 1.0, d4: 0.33, d1: 0.0]
    • 쿼리 2: [d1: 1.0, d5: 0.33, d4: 0.0]
  • 결합된 초기 점수: [d2: 1.0, d1: 0.5, d5: 0.33, d4: 0.165]

초기 쿼리 결과에 포스트 필터를 적용한 후 결과는 다음과 같아요.

  • 포스트 필터 일치: [d2, d4]
  • 결과 점수:
    • 쿼리 1: [d2: 5.0, d4: 3.0]
    • 쿼리 2: [d4: 0.25]
  • 정규화된 점수:
    • 쿼리 1: [d2: 1.0, d4: 0.0]
    • 쿼리 2: [d4: 1.0]
  • 결합된 최종 점수: [d2: 1.0, d4: 0.5]

다음 사항을 확인하세요.

  • 문서 d2의 점수는 변경되지 않았어요.
  • 문서 d4의 점수가 변경되었어요.

더 알아보기 (Learn more)