簡體   English   中英

在Elasticsearch中查詢嵌套對象

[英]Querying nested objects in Elasticsearch

我有一個Product-Merchant映射,如下所示

  catalog_map = {

        "catalog": {
            "properties": {
                "merchant_id": {
                    "type": "string",
                },
                "products": {
                    "type": "object",
                },
                "merchant_name" :{
                    "type" : "string"
                }
            }
        }
    }

“產品”具有對象,例如product_id,product_name,product_price。 產品和商家的映射如下:

    for merchant in Merchant.objects.all() :

        products = [{"product_name" : x.product.name, "product_price" : x.price, "product_id" : x.product.id , "product_category" : x.product.category.name} for x in MerchantProductMapping.objects.filter(merchant=merchant)]

        tab = {
            'merchant_id': merchant.id,
            'merchant_name': merchant.name,
            'product': products
            }

       res = es.index(index="my-index", doc_type='catalog', body=tab)

數據以所需的形式平滑索引。 現在,當我從給定索引中查詢數據時,我將通過以下方式進行操作:

GET /esearch-index/catalog/_search
{ 
"query": {
"bool" :{
    "must": [
       {"match": {
          "merchant_name": {
              "query": "Sir John"
          }
       }}], 
       "should": [
          {"match": {
             "product_name": {
                 "query": "Vanilla"
             }
          }}
       ]
    }}

該查詢為我提供了商家名稱為“ Sir John”的索引中所有產品的結果。 但是, 我希望它返回“爵士先生”出售的“香草”產品的詳細信息。

根據某人的建議,我在查詢時使用了“ _source”,但這沒有幫助。

如何從商家的整個“目錄”索引中選出一個對象的信息?

一旦布爾查詢具有must子句,則其中的所有條件都是必需的。 should子句中的條件不是必需的。 他們只會提高結果。 http://www.elasticsearch.org/guide/zh-CN/elasticsearch/reference/current/query-dsl-bool-query.html#query-dsl-bool-query

因此,返回您的查詢,它將檢索與商人名稱“ Sir John”相匹配的所有目錄。 這是唯一必需的(必須)條件。 名稱“ Vanilla”只會將名稱頂部為“ Vanilla”的結果提高,因為這不是必需的。

如果要檢索“爵士先生”出售的“香草”,請將兩個條件都放在must子句中,並將查詢更改為此:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "merchant_name": {
              "query": "Sir John"
            }
          }
        },
        {
          "match": {
            "product_name": {
              "query": "Vanilla"
            }
          }
        }
      ]
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM