【问题标题】:Fixing a Simple Elasticsearch Query修复一个简单的 Elasticsearch 查询
【发布时间】:2018-06-06 21:33:27
【问题描述】:

我有以下数据:

{
   "results":[
      {
         "ID":"1",
         "products":[
            {
               "product":"car",
               "number":"5"
            },
            {
               "product":"computer",
               "number":"212"
            }
         ]
      },
      {
         "ID":"2",
         "products":[
            {
               "product":"car",
               "number":"9"
            },
            {
               "product":"computer",
               "number":"463"
            },
            {
               "product":"bicycle",
               "number":"5"
            }
         ]
      }
   ]
}

我的查询如下:

{  
   "query":{  
      "bool":{  
         "must":[  
            {  
               "wildcard":{  
                  "results.products.product":"*car*"
               }
            },
            {  
               "wildcard":{  
                  "results.products.number":"*5*"
               }
            }
         ]
      }
   }
}

我期望得到的只是 ID1。因为只有它有一个带有 { "product":"car", "number":"5" } 记录的产品。但是我得到的是ID1和ID2,因为ID2的第一条记录有“product”:“car”,第三条记录分别有“number”:“5”条记录。

如何解决这个问题?

【问题讨论】:

    标签: database elasticsearch search elasticsearch-dsl


    【解决方案1】:

    您需要在创建映射时将您的产品定义为nested type。尝试以下映射示例:

    PUT http://localhost:9200/indexname
    
    {
      "mappings": {
         "typename": {
            "properties": {
               "products" : {
                  "type" : "nested"
                }
              }
           }
        }
     }
    

    然后您可以使用嵌套查询来匹配数组的整个元素 - 就像您需要的那样。

    {
      "query": {
        "nested": {
          "path": "products",
          "query": {
            "bool": {
              "must": [
                { "wildcard": { "products.product": "*car*" }},
                { "wildcard": { "products.number":  "*5*" }} 
              ]
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      相关资源
      最近更新 更多