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

Post-filtering vector search results

원문 보기 위키 갱신

출처: 문서

본문

벡터 검색 결과 사후 필터링

불리언 필터를 사용하거나 post_filter 파라미터를 제공해서 사후 필터링을 수행할 수 있어요.

ANN 검색에서 불리언 필터 사용

불리언 필터는 k-NN 쿼리와 필터를 포함하는 불리언 쿼리로 구성돼요. 예를 들어 다음 쿼리는 지정된 location에서 가장 가까운 호텔을 검색한 다음, 결과를 필터링해서 평점이 8 이상 10 이하이고 주차 서비스를 제공하는 호텔을 반환해요:

POST /hotels-index/_search
{
  "size": 3,
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "rating": {
                  "gte": 8,
                  "lte": 10
                }
              }
            },
            {
              "term": {
                "parking": "true"
              }
            }
          ]
        }
      },
      "must": [
        {
          "knn": {
            "location": {
              "vector": [
                5,
                4
              ],
              "k": 20
            }
          }
        }
      ]
    }
  }
}

{% include copy-curl.html %}

응답에는 일치하는 호텔이 담긴 문서가 포함돼요:

post_filter 파라미터

knn 쿼리를 필터나 다른 절(예: bool, must, match)과 함께 사용하면 k개보다 적은 결과를 받을 수도 있어요. 이 예제에서 post_filter는 결과 개수를 2개에서 1개로 줄여요:

GET my-knn-index-1/_search
{
  "size": 2,
  "query": {
    "knn": {
      "my_vector2": {
        "vector": [2, 3, 5, 6],
        "k": 2
      }
    }
  },
  "post_filter": {
    "range": {
      "price": {
        "gte": 5,
        "lte": 10
      }
    }
  }
}

{% include copy-curl.html %}

더 알아보기 (Learn more)