【问题标题】:How many nested query in elasticsearch?elasticsearch中有多少嵌套查询?
【发布时间】:2015-11-23 18:38:26
【问题描述】:

我将 ElaticSearch 1.7.2 用于我的项目并使用 marvel 插件来测试查询。 我的查询模板是这样的:

GET myindex/_search
{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "nested": {
                "path": "mypath",
                "query": {
                  "bool": {
                    "should": [
                      {
                        "terms": {
                          "mypath.field": []
                        }
                      },
                      {
                        "match": {
                          "mypath.desc": "abb"
                        }
                      }
                    ],
                    "minimum_number_should_match": 1
                  }
                }
              }
            },
            {
              "nested": {
                "path": "mypath02",
                "query": {
                  "bool": {
                    "should": [
                      {
                        "match": {
                          "mypath02.one": "1"
                        }
                      },
                      {
                        "match": {
                          "mypath02.two": "2"
                        }
                      },
                      {
                        "match": {
                          "mypath02.three": "3"
                        }
                      }
                    ],
                    "minimum_number_should_match": 1
                  }
                }
              }
            },
            {
              "nested": {
                "path": "mypath03",
                "query": {
                  "bool": {
                    "should": [
                      {
                        "terms": {
                          "mypath03.hash": [
                            "39651",
                            "cecc5"
                          ]
                        }
                      }
                    ]
                  }
                }
              }
            },
            {
              "nested": {
                "path": "mypath04",
                "query": {
                  "bool": {
                    "should": [
                      {
                        "terms": {
                          "mypath04.hash": [
                            "39651",
                            "cecc5"
                          ]
                        }
                      },
                      {
                        "nested": {
                          "path": "mypath05",
                          "query": {
                            "bool": {
                              "should": [
                                {
                                  "match": {
                                    "mypath05.hash01": "afcee"
                                  }
                                },
                                {
                                  "match": {
                                    "mypath05.hash02": "aceff"
                                  }
                                }
                              ],
                              "minimum_number_should_match": 1
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

第一次执行时,我收到了这条消息:

请求未能到达服务器(状态码:0):

Elasticsearch 可能无法访问,或者您可能需要检查您的 CORS 设置。如果启用了 CORS,请尝试关闭 Sense 的 Basic 设置(齿轮图标)下的身份验证支持。这将导致 浏览器对 CORS 的执行不那么严格。请检查奇迹 文档以获取更多信息。

更新 11.23.2015 在文件中添加更多日志信息:elasticsearch.log

[2015-11-23 01:12:16,911][WARN ][http.netty               ] [Kick-Ass] Caught exception while handling client http traffic, closing connection [id: 0x29cab67e, /192.168.16.1:2703 :> /192.168.16.132:9200]
java.lang.IllegalArgumentException: empty text
        at org.elasticsearch.common.netty.handler.codec.http.HttpVersion.<init>(HttpVersion.java:89)
        at org.elasticsearch.common.netty.handler.codec.http.HttpVersion.valueOf(HttpVersion.java:62)
        at org.elasticsearch.common.netty.handler.codec.http.HttpRequestDecoder.createMessage(HttpRequestDecoder.java:75)
        at org.elasticsearch.common.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:191)
        at org.elasticsearch.common.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:102)
        at org.elasticsearch.common.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:500)
        at org.elasticsearch.common.netty.handler.codec.replay.ReplayingDecoder.cleanup(ReplayingDecoder.java:554)
        at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.channelDisconnected(FrameDecoder.java:365)
        at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:102)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
        at org.elasticsearch.common.netty.channel.Channels.fireChannelDisconnected(Channels.java:396)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.close(AbstractNioWorker.java:360)
        at org.elasticsearch.common.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:81)
        at org.elasticsearch.common.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:36)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:779)
        at org.elasticsearch.common.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:54)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:784)
        at org.elasticsearch.common.netty.channel.SimpleChannelHandler.closeRequested(SimpleChannelHandler.java:334)
        at org.elasticsearch.common.netty.channel.SimpleChannelHandler.handleDownstream(SimpleChannelHandler.java:260)
        at org.elasticsearch.http.netty.pipelining.HttpPipeliningHandler.handleDownstream(HttpPipeliningHandler.java:105)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:582)
        at org.elasticsearch.common.netty.channel.Channels.close(Channels.java:812)
        at org.elasticsearch.common.netty.channel.AbstractChannel.close(AbstractChannel.java:206)
        at org.elasticsearch.http.netty.NettyHttpServerTransport.exceptionCaught(NettyHttpServerTransport.java:343)
        at org.elasticsearch.http.netty.HttpRequestHandler.exceptionCaught(HttpRequestHandler.java:72)
        at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:112)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.channel.SimpleChannelHandler.exceptionCaught(SimpleChannelHandler.java:156)
        at org.elasticsearch.common.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:130)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.exceptionCaught(SimpleChannelUpstreamHandler.java:153)
        at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:112)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.exceptionCaught(SimpleChannelUpstreamHandler.java:153)
        at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:112)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.exceptionCaught(FrameDecoder.java:377)
        at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:112)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
        at org.elasticsearch.common.netty.channel.Channels.fireExceptionCaught(Channels.java:525)
        at org.elasticsearch.common.netty.channel.AbstractChannelSink.exceptionCaught(AbstractChannelSink.java:48)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.notifyHandlerException(DefaultChannelPipeline.java:658)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:566)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
        at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
        at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
        at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
        at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
        at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
        at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

我关注了这个帖子:ES reachable from curl but not from Marvel/Sense

但什么都没有解决!

实际上,当我从上面的查询中仅删除一个嵌套查询时,它运行成功。

请帮我解决这个问题! 谢谢。

我的问题已解决 11.23.2015

我没有准确地删除作为嵌套对象的字段类型,更新索引映射和我的查询成功运行。

【问题讨论】:

  • 你能发布你说它有效的查询吗?
  • 只需从我的查询中删除一个嵌套查询,例如,删除包含:"nested": { "path": "mypath02", ..... 的嵌套查询
  • 这没有意义。无论查询如何,来自 Sense 的查询都会失败或失败。因为失败来自连接,而不是查询本身。我建议再次对此进行测试,并提出正确的复制步骤列表。
  • @Andrei Stefan 输出消息让我感到困惑!我不知道失败与否。 “Elasticsearch 可能无法访问,或者您可能需要检查您的 CORS 设置......”。我使用 curl 命令行的结果相同。
  • @Tr.Crab,你的问题让我们感到困惑。我们也不知道是什么失败了,而且没有额外的信息(你如何提交查询,发生了什么,你的客户端和 ES 位于哪里......),我们仍然不会。

标签: elasticsearch configuration cors nested-query elasticsearch-marvel


【解决方案1】:

我仍然不知道您的客户端/服务器在哪里(同一台机器,不同的机器)以及您在做什么(运行 curl 可能会有很多不同)。处理您给我们的内容,这是我的答案(如果不是屏幕截图,我会将其作为评论插入它的基本角色)。假设默认 ES 设置和配置。

请检查是否

  1. 为您的 ElastiSearch 服务器启用了 CORS
  2. 在接受的 CORS 来源中,您的客户端/curl 尝试从其中连接
  3. CORS 已启用,如果启用(并且您正在使用 Sense)禁用 Sense 的基本身份验证支持
  4. 您提交给 ElasticSearch 的 HTTP 请求(请记住,这不仅仅是您的搜索查询)符合要求的 LENGTH 标准

有关条件的详细信息,请参见下面的屏幕截图:

来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html(2015 年 11 月 22 日阅读)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多