过滤Elasticsearch Percolate API中执行的查询

时间:2013-11-26 18:23:31

标签: curl elasticsearch

我有这段代码:

#!/bin/bash

# Deletes, then creates the collection "foo".
curl -s -XDELETE localhost:9200/foo > /dev/null
curl -s -XPUT localhost:9200/foo > /dev/null

# Creates two percolators called "barbaz1" and "barbaz2" with different
# values in the "plugh" field.
curl -XPUT localhost:9200/_percolator/foo/barbaz1 -d '{
    "plugh": "xyzzy",
    "query": {
        "term": {
            "bar": "baz"
        }
    }
}'
echo ""

curl -XPUT localhost:9200/_percolator/foo/barbaz2 -d '{
    "plugh": "waldo",
    "query": {
        "term": {
            "bar": "baz"
        }
    }
}'
echo ""

# First filters out all queries whose "plugh" field is not "waldo", then
# tries to match those. Does NOT work as expected!
curl -XGET localhost:9200/foo/qux/_percolate -d '{
    "doc": {
        "bar": "baz"
    },
    "query": {
        "term": {
            "plugh": "waldo"
        }
    }
}'
echo ""

# Deletes the created percolators.
curl -s -XDELETE localhost:9200/_percolator/foo/barbaz1 > /dev/null
curl -s -XDELETE localhost:9200/_percolator/foo/barbaz2 > /dev/null

创建两个名为barbaz1barbaz2的过滤器,然后针对它们运行文档。我希望看到的只有barbaz2匹配,而我得到的是:

{"ok":true,"_index":"_percolator","_type":"foo","_id":"barbaz1","_version":1}
{"ok":true,"_index":"_percolator","_type":"foo","_id":"barbaz2","_version":1}
{"ok":true,"matches":[]}

我做错了什么?

1 个答案:

答案 0 :(得分:2)

它不起作用,因为您在为过滤器编制索引后过早询问_percolate

如果您在渗透前在refresh索引上添加_percolator,它将会有效:

curl -XPOST 'http://localhost:9200/_percolator/_refresh'