Percolate没有按预期返回结果

时间:2014-06-15 09:58:24

标签: elasticsearch elasticsearch-percolate

我们正在尝试设置并使用渗透液,但我们并未按预期获得结果。

首先,我注册了几个问题:

curl -XPUT 'localhost:9200/index-234234/.percolator/query1' -d '{
    "query" : {
        "range" : {
            "price" : { "gte": 100 }
        }
    }
}'

curl -XPUT 'localhost:9200/index-234234/.percolator/query2' -d '{
    "query" : {
        "range" : {
            "price" : { "gte": 200 }
        }
    }
}'

然后,当我尝试将其与150匹配时,理想情况下只匹配query1,而不是匹配两个查询:

curl -XGET 'localhost:9200/index-234234/message/_percolate' -d '{
    "doc" : {
        "price" : 150
    }
}'

{"took":4,"_shards":{"total":5,"successful":5,"failed":0},"total":2,"matches":[{"_index":"index-234234","_id":"query1"},{"_index":"index-234234","_id":"query2"}]}

关于为什么会发生这种情况的任何指示都将非常感激。

2 个答案:

答案 0 :(得分:5)

问题是您在设置文档的映射之前注册了过滤器查询。过滤器必须在没有定义映射的情况下注册查询,这对于范围查询尤其是一个问题。

您应该重新开始删除索引,然后首先运行此映射命令:

curl -XPOST localhost:9200/index-234234 -d '{
 "mappings" : {
      "message" : {
        "properties" : {
          "price" : {
            "type" : "long"
          }
        }
      }
    }
}'

然后执行以前的命令(注册两个过滤器查询,然后渗透一个文档),您将得到以下正确答案:

{"took":3,"_shards":{"total":5,"successful":5,"failed":0},"total":1,"matches":[{"_index":"index-234234","_id":"query1"}]}

您可能会发现几年前的讨论很有帮助:

http://grokbase.com/t/gg/elasticsearch/124x6hq4ev/range-query-in-percolate-not-working

答案 1 :(得分:1)

不是解决方案,但这对我有用(不知道为什么):

  1. 注册过滤器查询
  2. 执行_percolator请求(返回结果:"total": 2
  3. 再次注册两个过滤器查询(两者现在都在版本2中)
  4. 再次执行_percolator请求(返回正确的结果:"total": 1