【问题标题】:PercolateException[failed to percolate]; nested - Percolate API on nested documentPercolateException[渗透失败];嵌套 - 嵌套文档上的渗透 API
【发布时间】:2015-02-05 19:33:01
【问题描述】:

我使用的是弹性搜索 1.1。

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

虽然,我正在尝试这样做,但我收到以下错误:

failures: [

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

]

我有以下过滤器(抱歉,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"
    }
  }
}

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

编辑:

在 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

【问题讨论】:

    标签: elasticsearch nested


    【解决方案1】:

    ES 的文档对此并不十分清楚。但是当您查看this page 时,您会发现当您进行渗透时,您需要用 doc{} 包围您的索引文档。这确实是强制性的,否则您将出现异常:

    尝试这样做:

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

    我希望它会有所帮助;-)

    【讨论】:

    • 谢谢你的解决方案
    • 嗨 asimov,你能用一个新问题明确你的问题吗?提供映射、请求和回答 ;-)
    【解决方案2】:

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

    因为 GET 请求有一个正文,它还应该有一个“Content-Length”HTTP 标头,但并非所有 API 都会为您设置;因为我发现了困难的方式!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2023-01-24
      • 2016-02-25
      • 2019-05-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多