【问题标题】:Questions about joint query?关于联合查询的问题?
【发布时间】:2020-10-13 04:38:04
【问题描述】:

使用 Elasticsearch 搜索“ a 的产品 ID 或(b 的产品 ID 和 c 的价格) " 与 kibana 的 devp 这是我的代码:(什么是对的?)

 GET my_store/products/_search
{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                        "productId":a
                    }},
                    {"match":{
                        "productId":b
                    }
                }
                ],
            "must":{
                "match":{
                    "price":c
                }
            }
        }
    }
}

【问题讨论】:

标签: elasticsearch elasticsearch-query booleanquery


【解决方案1】:

你想要productID of a or (productID of b and price of c)。听起来像

productId=a OR (productId=b AND price=C)

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {"productID": "a"}
                },
                {
                    "bool": {
                        "must": [
                            {"match": {"productID": "b"}},
                            {"match": {"price": "c"}}
                        ]
                    }
                }
            ]
        }
    }
}

你考虑以下

OR = should AND = must

【讨论】:

  • 如果答案有帮助,您能否点赞/接受/两者兼而有之?
【解决方案2】:

由于您没有提及您所获取的数据,因此我对以下数据进行了索引:

样本索引数据

{
   "productId":"a",
   "price": 100
}
{
   "productId":"b",
   "price": 200
}
{
   "productId":"c",
   "price": 300
}

搜索查询:

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {"productId": "a"}
                },
                {
                    "bool": {
                        "must": [
                            {"match": {"productId": "b"}},
                            {"match": {"price": 700}}
                        ]
                    }
                }
            ]
        }
    }
}

搜索结果:

"hits": [
         {
            "_index": "foo10",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.9808292,
            "_source": {
               "productId": "a",
               "price": 100
            }
         }
      ]

这里,由于没有与“productId”:“b”和“price”:700`匹配的数据,因此在搜索结果中仅显示“productId”:“a”的数据。

您可以简单地将Must 等同于逻辑与,将should 视为逻辑或

参考此了解Elasticsearch difference between MUST and SHOULD bool query,了解布尔查询的详细解释参考此官方documentation

【讨论】:

  • 它与上述答案有何不同?除了样本数据。
  • @Gibbs 我也得到了和你一样的搜索查询,但在我的回答中,我还添加了一些示例数据和一些链接,希望能让问题更清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多