日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于es查询dsl的filter与must,term与match的区别

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于es查询dsl的filter与must,term与match的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【1】創建es7? 索引

put localhost:9200/pdi_cust , 注意 PUB_CUST_LABEL 字段分詞了。 es7 不支持type ,所以 無需指定type。

{ "mappings" :{ "properties":{"RCRD_ID":{"type":"keyword"}, "BUSI_CODE":{"type":"keyword"}, "STATE":{"type":"keyword"}, "LOANS":{"type":"nested", "properties" :{"LOAN_NUM":{"type":"keyword"}, "PUB_CUST_LABEL":{"type":"text"}, "DATA_SRC":{"type":"keyword"}, "CUST_NUM": {"type":"keyword"}, "LOAN_BAL_SUM":{"type":"double"}, "OVD_MONEY_SUM": {"type": "double"}}}}} }

【2】插入索引文檔:? post localhost:9200/pdi_cust/_doc/tr_rd_01

{ "RCRD_ID":"tr_rd_01", "STATE":"PDOS" , "BUSI_CODE":"pdi", "LOANS":[{"CUST_NUM":"CUST_NUM_01", "DATA_SRC":"VALD", "LOAN_BAL_SUM":"1111", "LOAN_NUM":"LOAN_NUM_01", "OVD_MONEY_SUM":"1111", "PUB_CUST_LABEL":"張三 李四 王五"}] }

【3】查詢索引所有文檔

post localhost:9200/pdi_cust/_search

{}

// 查詢es所有文檔 {"took": 4,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 1.0,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi","LOANS": [{"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "張三 李四 王五"},{"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "2222","LOAN_NUM": "LOAN_NUM_02","OVD_MONEY_SUM": "2222","PUB_CUST_LABEL": "張三2 李四2 王五2"}]}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_score": 1.0,"_source": {"RCRD_ID": "tr_rd_02","STATE": "PDOS","BUSI_CODE": "pdi","LOANS": [{"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1113","LOAN_NUM": "LOAN_NUM_3","OVD_MONEY_SUM": "1113","PUB_CUST_LABEL": "李四"},{"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1114","LOAN_NUM": "LOAN_NUM_4","OVD_MONEY_SUM": "1114","PUB_CUST_LABEL": "張三"}]}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_score": 1.0,"_source": {"RCRD_ID": "tr_rd_03","STATE": "PDOS","BUSI_CODE": "pdi","LOANS": [{"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1115","LOAN_NUM": "LOAN_NUM_5","OVD_MONEY_SUM": "1115","PUB_CUST_LABEL": "李四 王五"},{"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1116","LOAN_NUM": "LOAN_NUM_6","OVD_MONEY_SUM": "1116","PUB_CUST_LABEL": "張三"}]}}]} }

【4】根據嵌套類型查詢 (filter 與 must 是屬于同一個級別的查詢方式,都可以作為 query->bool 的屬性)

【3】根據嵌套類型查詢? (filter 與 must 是屬于同一個級別的查詢方式,都可以作為 query->bool? 的屬性)
3.1、filter: 不計算評分, 查詢效率高;有緩存; ?(推薦)
?? ?+ term: 精確匹配;
?? ?+ match: 模糊匹配, 倒排索引;
3.2、must: 要計算評分,查詢效率低;無緩存;
?? ?+term: 精確匹配 , 要評分;
?? ?+match:模糊匹配, 要評分;

【荔枝】

1、使用 filter+term實現精確匹配不計分查詢;

// dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"term":{"STATE":"PDOS"} } , {"nested":{"path":"LOANS", "query":{"bool":{"filter":[{"term": {"LOANS.LOAN_NUM": "LOAN_NUM_01"}}] }}, "inner_hits": { }} }]} } } // 查詢結果 {"took": 8,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "張三 李四 王五"}}]}}}}]} }

score 為0則表示沒有計算得分;

2、使用filter+match 使用不計算得分,但模糊匹配;

// dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"match":{"STATE":"PDOS"} } , {"nested":{"path":"LOANS", "query":{"bool":{"filter":[{"match": {"LOANS.PUB_CUST_LABEL": "張三 李四"}}] }}, "inner_hits": { }} }]} } } // 結果 {"took": 35,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "張三 李四 王五"}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 1},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "2222","LOAN_NUM": "LOAN_NUM_02","OVD_MONEY_SUM": "2222","PUB_CUST_LABEL": "張三2 李四2 王五2"}}]}}}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_02","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1113","LOAN_NUM": "LOAN_NUM_3","OVD_MONEY_SUM": "1113","PUB_CUST_LABEL": "李四"}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_nested": {"field": "LOANS","offset": 1},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1114","LOAN_NUM": "LOAN_NUM_4","OVD_MONEY_SUM": "1114","PUB_CUST_LABEL": "張三"}}]}}}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_03","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1115","LOAN_NUM": "LOAN_NUM_5","OVD_MONEY_SUM": "1115","PUB_CUST_LABEL": "李四 王五"}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_nested": {"field": "LOANS","offset": 1},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1116","LOAN_NUM": "LOAN_NUM_6","OVD_MONEY_SUM": "1116","PUB_CUST_LABEL": "張三"}}]}}}}]} }

以上dsl,把 match 換位 term, 查詢不到任何結果,因為 PUB_CUST_LABEL 是 text 類型,分詞了,term是精確匹配;

?

3、使用 must+term, 實現計算得分并精確匹配(查詢效率低于 filter+term),因為 must要計算匹配得分

// dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"must":[{"term":{"STATE":"PDOS"} } , {"nested":{"path":"LOANS", "query":{"bool":{"must":[{"term": {"LOANS.LOAN_NUM": "LOAN_NUM_01"}}] }}, "inner_hits": { }} }]} } } // 結果 {"took": 13,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.6739764,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 1.6739764,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.5404451,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 1.5404451,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "張三 李四 王五"}}]}}}}]} }

4、使用must+match實現計算得分且走倒排索引查詢或模糊查詢

// dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"must":[{"match":{"STATE":"PDOS"} } , {"nested":{"path":"LOANS", "query":{"bool":{"must":[{"match": {"LOANS.LOAN_NUM": "LOAN_NUM_01"}}] }}, "inner_hits": { }} }]} } } //結果 {"took": 10,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.6739764,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 1.6739764,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.5404451,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 1.5404451,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "張三 李四 王五"}}]}}}}]} }

【小結】

1、對于 keyword類型的字段而言, 用 term 和 match 都是可以查詢的;但對于 text 類型的分詞字段而言,只能用match 才能夠查詢到結果;

2、根據嵌套類型查詢? (filter 與 must 是屬于同一個級別的查詢方式,都可以作為 query->bool? 的屬性)
2.1、filter: 不計算評分, 查詢效率高;有緩存; ?(推薦)
?? ?+ term: 精確匹配;
?? ?+ match: 模糊匹配, 倒排索引;
2.2、must: 要計算評分,查詢效率低;無緩存;
?? ?+term: 精確匹配 , 要評分;
?? ?+match:模糊匹配, 要評分;

總結

以上是生活随笔為你收集整理的关于es查询dsl的filter与must,term与match的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。