没有得到所有的结果

时间:2012-06-04 05:09:30

标签: elasticsearch

这是我之前提出的search stops after the first match

问题

我在这里给你一个映射。

{
    "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"
        }
    }
}

我没有结果。

请帮忙。

1 个答案:

答案 0 :(得分:1)

这是因为模糊的字段名称“status”。在查询处理期间,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.statusline_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" }
                }
            ]
        }
    }
}'