当前位置: 首页 > 面试题库 >

Elasticsearch中的嵌套查询

全流觞
2023-03-14
问题内容

我在获取与Elasticsearch一起使用的嵌套查询时遇到问题(如果我删除了查询字符串之一,则可以使用)。我要解决的问题是我有一个包含关闭列表的文档(关闭)。我想在条件满足另一个值的闭包列表中搜索一个值。那只是从argan
= 1的闭包中获得价值

{"query":{
  "bool":{
     "must":[
        {
           "nested":{
              "query":{
                 "query_string":{
                    "default_field": "closures.rating",
                    "query": "5"
                 },"query_string": {
                    "default_field": "closure.argang",
                    "query": "1"
                 } 
              },
              "path":"closures"
           }
       }
     ]
  }
}}

我正在得到这个错误响应;

     {
      "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards       failed; shardFailures {[O3wmPzFbTY6VkgvJOchpBQ][bransch_test][2]: SearchParseException[[bransch_test][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n   \"query\":{\n      \"bool\":{\n         \"must\":[\n            {\n               \"nested\":{\n                  \"query\":{\n                     \"query_string\":{\n                        \"default_field\": \"closures.rating\",\n                        \"query\": \"5\"\n                     },\"query_string\": {\n                        \"default_field\": \"closure.argang\",\n                        \"query\": \"1\"\n                     } \n                  },\n                  \"path\":\"closures\"\n               }\n           }\n         ]\n      }\n   }\n}]]]; nested: QueryParsingException[[bransch_test] [_na] query malformed, no field after start_object]; }{[O3wmPzFbTY6VkgvJOchpBQ][bransch_test][3]: SearchParseException[[bransch_test][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n   \"query\":{\n      \"bool\":{\n         \"must\":[\n            {\n               \"nested\":{\n                  \"query\":{\n                     \"query_string\":{\n                        \"default_field\": \"closures.rating\",\n                        \"query\": \"5\"\n                     },\"query_string\": {\n                        \"default_field\": \"closure.argang\",\n                        \"query\": \"1\"\n                     } \n                  },\n                  \"path\":\"closures\"\n               }\n           }\n         ]\n      }\n   }\n}]]]; nested: QueryParsingException[[bransch_test] [_na] query malformed, no field after start_object]; }{[O3wmPzFbTY6VkgvJOchpBQ][bransch_test][4]: SearchParseException[[bransch_test][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n   \"query\":{\n      \"bool\":{\n         \"must\":[\n            {\n               \"nested\":{\n                  \"query\":{\n                     \"query_string\":{\n                        \"default_field\": \"closures.rating\",\n                        \"query\": \"5\"\n                     },\"query_string\": {\n                        \"default_field\": \"closure.argang\",\n                        \"query\": \"1\"\n                     } \n                  },\n                  \"path\":\"closures\"\n               }\n           }\n         ]\n      }\n   }\n}]]]; nested: QueryParsingException[[bransch_test] [_na] query malformed, no field after start_object]; }{[O3wmPzFbTY6VkgvJOchpBQ][bransch_test][0]: SearchParseException[[bransch_test][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n   \"query\":{\n      \"bool\":{\n         \"must\":[\n            {\n               \"nested\":{\n                  \"query\":{\n                     \"query_string\":{\n                        \"default_field\": \"closures.rating\",\n                        \"query\": \"5\"\n                     },\"query_string\": {\n                        \"default_field\": \"closure.argang\",\n                        \"query\": \"1\"\n                     } \n                  },\n                  \"path\":\"closures\"\n               }\n           }\n         ]\n      }\n   }\n}]]]; nested: QueryParsingException[[bransch_test] [_na] query malformed, no field after start_object]; }{[O3wmPzFbTY6VkgvJOchpBQ][bransch_test][1]: SearchParseException[[bransch_test][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n   \"query\":{\n      \"bool\":{\n         \"must\":[\n            {\n               \"nested\":{\n                  \"query\":{\n                     \"query_string\":{\n                        \"default_field\": \"closures.rating\",\n                        \"query\": \"5\"\n                     },\"query_string\": {\n                        \"default_field\": \"closure.argang\",\n                        \"query\": \"1\"\n                     } \n                  },\n                  \"path\":\"closures\"\n               }\n           }\n         ]\n      }\n   }\n}]]]; nested: QueryParsingException[[bransch_test] [_na] query malformed, no field after start_object]; }]",
      "status": 400
     }

我的映射如下所示。

{
"closure": {
  "properties": {
     "name": {
        "type": "string"
     },
     "closures": {
        "type": "nested",
        "properties": {
           "argang": {
              "type": "string"
           },
           "rating": {
              "type": "string"
           }
        }
     },
     "coadr": {
        "type": "string"
     },
     "telnr": {
        "type": "string"
     }
  }
}
}

有人知道我在做什么错吗?


问题答案:

您的查询不是有效的查询。您需要使用适当的复合查询将其他查询组合在一起,而不能仅使用逗号并添加仅支持一个查询的另一个查询。

例如,您可以使用布尔查询并具有两个must子句,几乎是您的两个query_string。或者,也许您甚至可以切换到使用过滤器,并进行过滤查询。我将看一下本文中的示例:http :
//www.spacevatican.org/2012/6/3/fun-with-elasticsearch-s-children-and-nested-
documents/



 类似资料:
  • 我试图创建一个嵌套查询,它将过滤掉一些带有特定术语的文档。在本例中,我试图过滤掉在user.first中有匹配术语的文档。数据示例: 我的查询没有得到所需的结果,因为它返回给我所有未筛选的记录。我尝试使用: 我希望这里得到与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。做这件事的正确方法是什么?

  • 问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套

  • 问题内容: 我正在尝试使用query_string编写查询以检索嵌套对象的数据查询。 我想做的查询的一个例子是: 其中“ a”是嵌套对象,“ id”是“ a”的字段。 我知道我可以使用嵌套查询成功地执行此任务,编写如下查询: 但是,我想避免这种情况。我不想自己弄清楚用户正在搜索嵌套字段并修改查询。我尝试使用“ fields”参数,但它似乎不适用于嵌套对象。 是否可以使用“ query_string

  • 问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:

  • 我是elasticsearch的新手,对如何进行过滤器、查询和聚合有一些想法,但不确定如何解决下面的问题。我希望能够从下面显示的文档中只查询公司的最新交付(日期和crate_quantity)。我不确定如何去做。有没有办法使用最大聚合从每个文档中只提取最近的交付?

  • 我正在通过jHipster使用Spring Data Elasticsearch支持,并试图更多地了解如何使用搜索来扩展数据库中的一些新关系。 我有了一个新的嵌套关系,它有自己的索引: 我想将结果筛选到特定用户“friend1.id”,并在嵌套文档上搜索匹配的详细信息? 但这似乎没有返回任何结果?