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

Filter query processor

원문 보기 위키 갱신

출처: 문서

본문

필터 쿼리 프로세서

2.8에 도입됨 {: .label .label-purple }

filter_query 검색 요청 프로세서는 검색 요청을 가로채서 요청에 추가 쿼리를 적용하여 결과를 필터링해요. 기존 쿼리를 다시 작성하지 않고 결과에 추가 필터링이 필요할 때 유용해요.

요청 본문 필드

다음 표는 사용 가능한 모든 요청 필드를 보여줘요.

필드 데이터 타입 설명
query Object 쿼리 도메인 특화 언어(DSL)로 작성된 쿼리예요. OpenSearch 쿼리 유형 목록은 Query DSL을 참조하세요. 필수 항목이에요.
tag String 프로세서의 식별자예요. 선택 사항이에요.
description String 프로세서에 대한 설명이에요. 선택 사항이에요.
ignore_failure Boolean true로 설정하면 OpenSearch가 이 프로세서의 실패를 무시하고 검색 파이프라인에서 나머지 프로세서를 계속 실행해요. 선택 사항이에요. 기본값은 false예요.

예제

다음 예제는 filter_query 프로세서를 사용하는 검색 파이프라인을 보여줘요.

설정

my_index라는 인덱스를 만들고 공개 문서 하나와 비공개 문서 하나를 인덱싱해요.

POST /my_index/_doc/1
{
  "message": "This is a public message", 
  "visibility":"public"
}

{% include copy-curl.html %}

POST /my_index/_doc/2
{
  "message": "This is a private message", 
  "visibility": "private"
}

{% include copy-curl.html %}

검색 파이프라인 생성

다음 요청은 my_pipeline이라는 검색 파이프라인을 생성하며, filter_query 요청 프로세서가 term 쿼리를 사용하여 공개 메시지만 반환해요.

PUT /_search/pipeline/my_pipeline 
{
  "request_processors": [
    {
      "filter_query" : {
        "tag" : "tag1",
        "description" : "This processor is going to restrict to publicly visible documents",
        "query" : {
          "term": {
            "visibility": "public"
          }
        }
      }
    }
  ]
}

{% include copy-curl.html %}

검색 파이프라인 사용

검색 파이프라인 없이 my_index에서 문서를 검색해요.

GET /my_index/_search

{% include copy-curl.html %}

응답에는 두 문서가 모두 포함돼요.

응답 {: .text-delta} ```json { "took" : 47, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "my_index", "_id" : "1", "_score" : 1.0, "_source" : { "message" : "This is a public message", "visibility" : "public" } }, { "_index" : "my_index", "_id" : "2", "_score" : 1.0, "_source" : { "message" : "This is a private message", "visibility" : "private" } } ] } } ```

파이프라인으로 검색하려면 search_pipeline 쿼리 매개변수에 파이프라인 이름을 지정해요.

GET /my_index/_search?search_pipeline=my_pipeline

{% include copy-curl.html %}

응답에는 public 가시성을 가진 문서만 포함돼요.

응답 {: .text-delta} ```json { "took" : 19, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.0, "hits" : [ { "_index" : "my_index", "_id" : "1", "_score" : 0.0, "_source" : { "message" : "This is a public message", "visibility" : "public" } } ] } } ```

더 알아보기 (Learn more)