Percolator 필드 타입

Percolator 필드 타입

percolator 필드 타입은 이 필드를 쿼리로 취급하도록 지정해요. 어떤 JSON 객체 필드든 percolator 필드로 표시할 수 있어요. 일반적으로 문서가 색인되고 문서를 대상으로 검색이 실행돼요. percolator 필드를 사용하면 검색을 저장하고, 나중에 percolate 쿼리가 문서를 그 검색과 매칭해요. 자세한 예시는 Percolate query 문서를 참고하세요.

출처: 문서

본문

예시

고객이 400달러 이하인 테이블을 검색하고 있으며, 이 검색에 대한 알림(alert)을 만들고 싶어 해요.

query 필드에 percolator 필드 타입을 할당하는 매핑을 만들어요.

PUT testindex1
{
  "mappings": {
    "properties": {
      "search": {
        "properties": {
          "query": { 
            "type": "percolator" 
          }
        }
      },
      "price": { 
        "type": "float" 
      },
      "item": { 
        "type": "text" 
      }
    }
  }
}

쿼리를 색인해요.

PUT testindex1/_doc/1
{
  "search": {
    "query": {
      "bool": {
        "filter": [
          { 
            "match": { 
              "item": { 
                "query": "table" 
              }
            }
          },
          { 
            "range": { 
              "price": { 
                "lte": 400.00 
              } 
            } 
          }
        ]
      }
    }
  }
}

쿼리에서 참조되는 필드는 이미 매핑에 존재해야 해요.

매칭 문서를 검색하기 위해 percolate 쿼리를 실행해요.

GET testindex1/_search
{
  "query" : {
    "bool" : {
      "filter" : 
        {
          "percolate" : {
            "field" : "search.query",
            "document" : {
              "item" : "Mahogany table",
              "price": 399.99
            }
          }
        }
    }
  }
}

응답에는 원래 색인된 쿼리가 포함돼요.

{
  "took" : 30,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.0,
    "hits" : [
      {
        "_index" : "testindex1",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.0,
        "_source" : {
          "search" : {
            "query" : {
              "bool" : {
                "filter" : [
                  {
                    "match" : {
                      "item" : {
                        "query" : "table"
                      }
                    }
                  },
                  {
                    "range" : {
                      "price" : {
                        "lte" : 400.0
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "fields" : {
          "_percolator_document_slot" : [
            0
          ]
        }
      }
    ]
  }
}

더 알아보기 (Learn more)