elasticsearch-文檔-父子文檔(十一)


說明

需求 一個產品多個區域銷售 每個區域有自己的價格,

方式1冗余行,a 產品分別在  area1 area2 area3區域銷售 a產品就會生成3條產品數據 搜索id去重就行了,但是問題就是 聚合去重不支持 獲得count 所以不能分頁 只有選擇假分頁

方式2:父子關系  用於描述一對多管理  這里我采用方式2  產品為父文檔 區域產品信息為子文檔

6.*以下版本

創建索引

//put http://192.168.20.4:9200/lq_product_test
{
"mappings": { "product": {}, //父文檔 type name "areaProductInfo": { //子文檔type name "_parent": { "type": "product" //指定子文檔的父文檔typename } } } }

添加測試數據

1.插入文檔

注意最后一個js有個\n換行符哦

//post http://192.168.20.4:9200/lq_product_test/product/_bulk
{ "index": { "_id": "1" }}
{"productId":1, "name": "產品1","sumSellCount":10}
{ "index": { "_id": "2" }}
{"productId":2, "name": "產品2","sumSellCount":11}
{ "index": { "_id": "3" }}
{"productId":3, "name": "產品3","sumSellCount":12}

2.插入子文檔

http://192.168.20.4:9200/lq_product_test/areaProductInfo/1?parent=1

{
"id": 1,
"areaCode": 2,
"price": 20
}

http://192.168.20.4:9200/lq_product_test/areaProductInfo/2?parent=2

{
"id": 2,
"areaCode": 2,
"price": 30
}

get:http://192.168.20.4:9200/lq_product_test/_search

子文檔查詢

get:http://192.168.20.4:9200/lq_product_test/_search

包含有product父文檔的所有子文檔

{
  "query":{
      "has_parent":{
          "parent_type":"product",
          "query":{
              "match_all":{}
          }
      }
  }
}

父文檔增加條件

{
  "query":{
      "has_parent":{
          "parent_type":"product",
          "query":{
                  "term":{"productId":1}
              }
          }
      }
  }

父子文檔都增加條件

{
    "query": {
        "bool": {
            "must": [{
                "query": {
                    "term": {
                        "areaCode": 2
                    }
                }
            }, {
                "has_parent": {
                    "parent_type": "product",
                    "query": {
                        "term": {
                            "productId": 1
                        }
                    }
                }
            }]

        }
    }
}

 

function_score排序

{
    "query": {
        "function_score": {
            "query": {
                "has_parent": {
                    "parent_type": "product",
                    "query": {
                        "match_all": {}
                    }
                }
            },
            "script_score": {
                "script": "_score *sumSellCount"
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM