PercolateException[过滤失败];在嵌套文档上渗透API



我使用的是elasticsearch 1.1.

通常在这个版本中,嵌套文档上的渗透器应该可以工作。

虽然,我试图这样做,但我得到以下错误:

failures: [
    {
        index: test
        shard: 4
        reason: BroadcastShardOperationFailedException[[test][4] ]; nested: PercolateException[failed to percolate]; nested: ElasticsearchIllegalArgumentException[Nothing to percolate]; 
    }
]

我有以下percolator(对不起,elasticsearch head删除了我所有的引号):

{
    _index: test
    _type: .percolator
    _id: 27
    _version: 1
    _score: 1
    _source: {
        query: {
            filtered: {
                query: {
                    match_all: { }
                }
                filter: {
                    nested: {
                        filter: {
                            term: {
                                city: london
                            }
                        }
                        path: location
                    }
                }
            }
        }
    }
}

当试图渗透这个文档时,我得到了错误:

{
  ...
  "location": {
    "date": "2014-05-05T15:07:58",
    "namedplaces": {
      "city": "london"
    }
  }
}

知道为什么它不起作用吗?

EDIT:

在elasticsearch日志中,我得到了更精确的错误:

[2014-05-06 13:33:48,972][DEBUG][action.percolate         ] [Tomazooma] [test][2], node[H42BBxajRs2w2NmllMnp7g], [P], s[STARTED]: Failed to execute [org.elasticsearch.action.percolate.PercolateReque
st@7399452e]
org.elasticsearch.percolator.PercolateException: failed to percolate
        at org.elasticsearch.action.percolate.TransportPercolateAction.shardOperation(TransportPercolateAction.java:198)
        at org.elasticsearch.action.percolate.TransportPercolateAction.shardOperation(TransportPercolateAction.java:55)
        at org.elasticsearch.action.support.broadcast.TransportBroadcastOperationAction$AsyncBroadcastAction$2.run(TransportBroadcastOperationAction.java:226)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: Nothing to percolate
        at org.elasticsearch.percolator.PercolatorService.percolate(PercolatorService.java:187)
        at org.elasticsearch.action.percolate.TransportPercolateAction.shardOperation(TransportPercolateAction.java:194)
        ... 5 more

ES的文档对此并不是很清楚。但是,当您查看此页面时,您将看到,在进行渗透时,您需要用doc{}包围已索引的文档。它确实是强制性的,否则你得到的异常将出现:

尝试这样做:

   {
"doc":{
  ...
  "location": {
    "date": "2014-05-05T15:07:58",
    "namedplaces": {
      "city": "london"
    }
  }
}
}

我希望这对你有帮助;-)

Nothing to percolate异常的另一个原因是没有设置Content-Length HTTP头。

因为GET请求有一个body,它也应该有一个'Content-Length'的HTTP头,但不是所有的api都会为你设置这个;这是我历经艰辛才发现的!

最新更新