【问题标题】:Percolate not returning results as expected渗透未按预期返回结果
【发布时间】:2014-06-16 01:52:24
【问题描述】:

我们正在尝试设置和使用 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"}]}

任何关于为什么会发生这种情况的指针将不胜感激。

【问题讨论】:

    标签: elasticsearch elasticsearch-percolate


    【解决方案1】:

    问题是您在为文档设置映射之前注册过滤器查询。渗透器必须在没有定义映射的情况下注册查询,这可能是一个问题,特别是对于范围查询。

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

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

    然后执行你之前的命令(注册两个 percolator 查询然后 percolate 一个文档)你会得到以下正确的响应:

    {"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

    【讨论】:

    • 谢谢!这似乎是缺少的部分。遗憾的是,没有一个文档提到这一点。我们昨天花了一整天的时间试图弄清楚这一点。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2011-08-09
      • 2010-09-22
      • 2021-05-17
      相关资源
      最近更新 更多