說明
需求 一個產品多個區域銷售 每個區域有自己的價格,
方式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" } } } }