Elasticsearch 嵌套对象 query_string

Posted

技术标签:

【中文标题】Elasticsearch 嵌套对象 query_string【英文标题】:Elasticsearch nested object query_string 【发布时间】:2016-12-05 16:11:25 【问题描述】:

我对 ElasticSearch 中的 query_string 查询有疑问。我想对索引中的所有类型和字段创建全文搜索。 query_string 字符串是否针对嵌套对象执行?例如我有这个映射

 
  "my_index": 
    "mappings": 
      "my_type": 
        "properties": 
          "group": 
            "type": "string"
          ,
          "user": 
            "type": "nested",
            "properties": 
              "first": 
                "type": "string"
              ,
              "last": 
                "type": "string"
              
            
          
        
      
    
  

还有查询

GET /my_index/_search

  "query": 
      "query_string" : 
          "query" : "paul"
      
    

 

所以当我调用查询时,ES 是否会搜索所有字段,包括嵌套或仅在 my_type 对象中,而对于嵌套搜索,我将不得不使用嵌套查询?

【问题讨论】:

【参考方案1】:

您不能从根的 query_string 引用嵌套字段。即这行不通:


    "query": 
         "query_string": 
          "query": "myNestedObj.myTextField:food"
         
   

要在特定的嵌套字段中搜索,必须使用嵌套子句:


    "query": 
      "nested": 
        "path": "myNestedObj",
        "query": 
         "query_string": 
          "query": "myNestedObj.myTextField:food"
         
        
      
    
  

但是,我发现伪字段“_all”确实包含嵌套字段,因此此查询将在 myNestedObj.myTextField(以及其他任何地方)中找到包含“食物”的文档


    "query": 
         "query_string": 
          "query": "_all:food"
         
   

【讨论】:

感谢@anthonybruni,“但是,我发现伪字段“_all”确实包含嵌套字段,因此此查询将在 myNestedObj.myTextField 中找到包含“食物”的文档(以及其他任何地方)”这个答案正是我所要求的【参考方案2】:

试试:

GET my_index/_search?q=paul

【讨论】:

以上是关于Elasticsearch 嵌套对象 query_string的主要内容,如果未能解决你的问题,请参考以下文章

elasticSearch多条件高级检索语句,包含多个mustmust_notshould嵌套示例,并考虑nested对象的特殊检索

对映射的DynamoDb数据进行Elasticsearch嵌套查询不返回任何内容

转:elasticsearch nested嵌套查询

Elasticsearch如何管理 Elasticsearch 文档中的嵌套对象

无法使用 _delete_by_query 删除 Elasticsearch 中的项目

Elasticsearch 中的嵌套 vs 对象