ElasticSearch has_child查询不支持query_string

时间:2016-02-12 14:48:20

标签: elasticsearch

这就是我的映射看起来像

 {
   "state":"open",
   "settings":{
      "index":{
         "creation_date":"1453816191454",
         "number_of_shards":"5",
         "number_of_replicas":"1",
         "version":{
            "created":"1070199"
         },
         "uuid":"TfMJ4M0wQDedYSQuBz5BjQ"
      }
   },
   "mappings":{
      "Product":{
         "properties":{
            "index":"not_analyzed",
            "store":true,
            "type":"string"
         },
         "ProductName":{
            "type":"nested",
            "properties":{
               "Name":{
                  "store":true,
                  "type":"string"
               }
            }
         },
         "ProductCode":{
            "type":"string"
         },
         "Number":{
            "index":"not_analyzed",
            "store":true,
            "type":"string"
         },
         "id":{
            "index":"no",
            "store":true,
            "type":"integer"
         },
         "ShortDescription":{
            "store":true,
            "type":"string"
         },
         "Printer":{
            "_routing":{
               "required":true
            },
            "_parent":{
               "type":"Product"
            },
            "properties":{
               "properties":{
                  "RelativeUrl":{
                     "index":"no",
                     "store":true,
                     "type":"string"
                  }
               }
            },
            "PrinterId":{
               "index":"no",
               "store":true,
               "type":"integer"
            },
            "Name":{
               "store":true,
               "type":"string"
            }
         }
      },
      "aliases":[

      ]
   }
}

我想查询Printer子对象并取回产品。当我使用术语查询查询如下时,它适用于案例2230,但是当我给出hl-2230时,它不会返回任何内容,因为分析了名称字段。在这种情况下,我需要query_string来获得预期的结果。

    {

   "query": {
      "has_child": {
      "type": "Printer",
      "query": {  
          "term": {
             "Name":  "2230"             
          }        
    }
  }
  }
}

当我尝试查询时,我收到[has_child]查询不支持[query_string]]。我尝试了匹配查询,我收到相同的消息。 has_child只能用于术语查询吗?如果是这种情况,我怎样才能达到预期的效果呢?

   "query": {
      "has_child": {
      "type": "Printer",

"query_string": {
"default_field": "Name",
"query": "HL-2230"
}

  }

1 个答案:

答案 0 :(得分:1)

你犯了一个简单的错误。在query_string内使用query即可开始使用。

{
"query": {
  "has_child": {
     "type": "Printer",
     "query": {
        "query_string": {
           "default_field": "Name",
           "query": "HL-2230"
        }
      }
    }
  }
}