0

这是我的问题,与我 在第一场比赛后要求搜索停止的上一个问题有关

在这里,我给你映射。

{
    "copy_order_snapshot": {
        "properties": {
            "line_item_info": {
                "dynamic": "true",
                "properties": {
                    "m_product_details": {
                        "dynamic": "true",
                        "properties": {
                            "accessories_colour": {
                                "type": "string"
                            },
                            "status": {
                                "type": "string"
                            }
                        }
                    },
                    "other_details": {
                        "dynamic": "true",
                        "properties": {
                            "accessories_material_type": {
                                "type": "string"
                            }
                            "status": {
                                "type": "string"
                            }
                        }
                    },
                    "product_details": {
                        "dynamic": "true",
                        "properties": {
                            "accessories_colour": {
                                "type": "string"
                            },
                            "status": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "order_data": {
                "dynamic": "true",
                "properties": {
                    "state": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string"
                    }                    
                }
            }
        }
    }
}

在我之前谈到的问题中attribute_set_id,这里的情况与status. 而order_details->status is "enabled"其他状态为"1" and "canceled"。当我搜索

{
    "query":{
        "term":{
            "status":"enabled"
         }
    }
}

我得到结果

但如果我搜索

{
    "query":{
        "term":{
            "status":"1"
        }
    }
}

或者

{
    "query":{
        "term":{
            "status":"canceled"
        }
    }
}

我没有得到任何结果。

请帮忙。

4

1 回答 1

1

发生这种情况是因为字段名称“状态”不明确。在查询处理期间,elasticsearch 将字段名称“status”解析为其匹配的第一个完全限定字段名称。当我在我的机器上运行它时,它被解析为 line_item_info.other_details.status。

$ curl "localhost:9200/test-orders/_validate/query?q=status:blah&explain=true&pretty=true"
{
  "valid" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "explanations" : [ {
    "index" : "test-orders",
    "valid" : true,
    "explanation" : "line_item_info.other_details.status:blah"
  } ]
}

如果您希望查询匹配所有状态字段,您可能需要使用完全限定名称(例如line_item_info.other_details.status,line_item_info.m_product_details.status等)并使用Dis MaxBool Queries组合它们。

例如:

$ curl -XGET http://localhost:9200/test-orders/copy_order_snapshot/_search -d '{
    "query":{
        "bool" : {
            "should" : [
                {
                    "term" : { "line_item_info.m_product_details.status" : "1" }
                },
                {
                    "term" : { "line_item_info.other_details.status" : "enabled" }
                }
            ]
        }
    }
}'
于 2012-06-05T12:07:07.410 回答