将过滤器调用限制为ElasticSearch中的类型

时间:2012-10-24 13:56:33

标签: types elasticsearch restrict

如文档中所述,当我使用_percolator存储查询时,例如:

curl -XPUT localhost:9200/_percolator/test/kuku -d '{
  "color" : "blue",
  "query" : {
      "term" : {
        "field1" : "value1"
      }
   }
}'

当我在'test'索引上渗透文档时,将运行此查询,但如果我想将其限制为'test'索引的类型'foo',唯一的解决方案是在查询中添加一个类型:

curl -XPUT localhost:9200/_percolator/test/kuku -d '{
   "type":"foo",
   "color" : "blue",
   "query" : {
       "term" : {
         "field1" : "value1"
       }
  }
}'

添加文档时使用

curl -XGET localhost:9200/test/type1/_percolate -d '{
   "doc" : {
      "field1" : "value1"
    },
    "query" : {
      "term" : {
         "type" : "foo"
      }
    } 
  }'

还有其他解决方案吗? 我试过了

curl -XPUT localhost:9200/_percolator/test/foo/kuku

但它不起作用。

1 个答案:

答案 0 :(得分:2)

另一种方法是将原始查询包装到已过滤的查询中,并为_type:

添加术语过滤器
{
    "query": {
        "filtered":{
            "query": {
                "term":{
                    field1" : "value1"
                }
             },
             "filter": {
                 "term": {
                     "_type" : "type1"
                 }
              }
          }
     }
}