当前位置:   article > 正文

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

es term match filter

【1】创建es7  索引

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

  1. {
  2. "mappings" :{
  3. "properties":{
  4. "RCRD_ID":{
  5. "type":"keyword"
  6. }
  7. , "BUSI_CODE":{
  8. "type":"keyword"
  9. }
  10. , "STATE":{
  11. "type":"keyword"
  12. }
  13. , "LOANS":{
  14. "type":"nested"
  15. , "properties" :{
  16. "LOAN_NUM":{
  17. "type":"keyword"
  18. }
  19. , "PUB_CUST_LABEL":{
  20. "type":"text"
  21. }
  22. , "DATA_SRC":{
  23. "type":"keyword"
  24. }
  25. , "CUST_NUM": {
  26. "type":"keyword"
  27. }
  28. , "LOAN_BAL_SUM":{
  29. "type":"double"
  30. }
  31. , "OVD_MONEY_SUM": {
  32. "type": "double"
  33. }
  34. }
  35. }
  36. }
  37. }
  38. }

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

  1. {
  2. "RCRD_ID":"tr_rd_01"
  3. , "STATE":"PDOS"
  4. , "BUSI_CODE":"pdi"
  5. , "LOANS":[
  6. {"CUST_NUM":"CUST_NUM_01", "DATA_SRC":"VALD", "LOAN_BAL_SUM":"1111", "LOAN_NUM":"LOAN_NUM_01", "OVD_MONEY_SUM":"1111", "PUB_CUST_LABEL":"张三 李四 王五"}
  7. ]
  8. }

【3】查询索引所有文档

post localhost:9200/pdi_cust/_search

{}

  1. // 查询es所有文档
  2. {
  3. "took": 4,
  4. "timed_out": false,
  5. "_shards": {
  6. "total": 1,
  7. "successful": 1,
  8. "skipped": 0,
  9. "failed": 0
  10. },
  11. "hits": {
  12. "total": {
  13. "value": 3,
  14. "relation": "eq"
  15. },
  16. "max_score": 1.0,
  17. "hits": [
  18. {
  19. "_index": "pdi_cust",
  20. "_type": "_doc",
  21. "_id": "tr_rd_01",
  22. "_score": 1.0,
  23. "_source": {
  24. "RCRD_ID": "tr_rd_01",
  25. "STATE": "PDOS",
  26. "BUSI_CODE": "pdi",
  27. "LOANS": [
  28. {
  29. "CUST_NUM": "CUST_NUM_01",
  30. "DATA_SRC": "VALD",
  31. "LOAN_BAL_SUM": "1111",
  32. "LOAN_NUM": "LOAN_NUM_01",
  33. "OVD_MONEY_SUM": "1111",
  34. "PUB_CUST_LABEL": "张三 李四 王五"
  35. },
  36. {
  37. "CUST_NUM": "CUST_NUM_01",
  38. "DATA_SRC": "VALD",
  39. "LOAN_BAL_SUM": "2222",
  40. "LOAN_NUM": "LOAN_NUM_02",
  41. "OVD_MONEY_SUM": "2222",
  42. "PUB_CUST_LABEL": "张三2 李四2 王五2"
  43. }
  44. ]
  45. }
  46. },
  47. {
  48. "_index": "pdi_cust",
  49. "_type": "_doc",
  50. "_id": "tr_rd_02",
  51. "_score": 1.0,
  52. "_source": {
  53. "RCRD_ID": "tr_rd_02",
  54. "STATE": "PDOS",
  55. "BUSI_CODE": "pdi",
  56. "LOANS": [
  57. {
  58. "CUST_NUM": "CUST_NUM_02",
  59. "DATA_SRC": "VALD",
  60. "LOAN_BAL_SUM": "1113",
  61. "LOAN_NUM": "LOAN_NUM_3",
  62. "OVD_MONEY_SUM": "1113",
  63. "PUB_CUST_LABEL": "李四"
  64. },
  65. {
  66. "CUST_NUM": "CUST_NUM_02",
  67. "DATA_SRC": "VALD",
  68. "LOAN_BAL_SUM": "1114",
  69. "LOAN_NUM": "LOAN_NUM_4",
  70. "OVD_MONEY_SUM": "1114",
  71. "PUB_CUST_LABEL": "张三"
  72. }
  73. ]
  74. }
  75. },
  76. {
  77. "_index": "pdi_cust",
  78. "_type": "_doc",
  79. "_id": "tr_rd_03",
  80. "_score": 1.0,
  81. "_source": {
  82. "RCRD_ID": "tr_rd_03",
  83. "STATE": "PDOS",
  84. "BUSI_CODE": "pdi",
  85. "LOANS": [
  86. {
  87. "CUST_NUM": "CUST_NUM_03",
  88. "DATA_SRC": "VALD",
  89. "LOAN_BAL_SUM": "1115",
  90. "LOAN_NUM": "LOAN_NUM_5",
  91. "OVD_MONEY_SUM": "1115",
  92. "PUB_CUST_LABEL": "李四 王五"
  93. },
  94. {
  95. "CUST_NUM": "CUST_NUM_03",
  96. "DATA_SRC": "VALD",
  97. "LOAN_BAL_SUM": "1116",
  98. "LOAN_NUM": "LOAN_NUM_6",
  99. "OVD_MONEY_SUM": "1116",
  100. "PUB_CUST_LABEL": "张三"
  101. }
  102. ]
  103. }
  104. }
  105. ]
  106. }
  107. }

【4】根据嵌套类型查询 (filter 与 must 是属于同一个级别的查询方式,都可以作为 query->bool 的属性)

【3】根据嵌套类型查询  (filter 与 must 是属于同一个级别的查询方式,都可以作为 query->bool  的属性)
3.1、filter: 不计算评分, 查询效率高;有缓存;  (推荐)
    + term: 精确匹配;
    + match: 模糊匹配, 倒排索引;
3.2、must: 要计算评分,查询效率低;无缓存;
    +term: 精确匹配 , 要评分;
    +match:模糊匹配, 要评分;

【荔枝】

1、使用 filter+term实现精确匹配不计分查询;

  1. // dsl
  2. {
  3. "_source":["RCRD_ID", "STATE", "BUSI_CODE"]
  4. , "query":{
  5. "bool":{
  6. "filter":[
  7. {
  8. "term":{
  9. "STATE":"PDOS"
  10. }
  11. }
  12. , {
  13. "nested":{
  14. "path":"LOANS"
  15. , "query":{
  16. "bool":{
  17. "filter":[
  18. {
  19. "term": {
  20. "LOANS.LOAN_NUM": "LOAN_NUM_01"
  21. }
  22. }
  23. ]
  24. }
  25. }
  26. , "inner_hits": {
  27. }
  28. }
  29. }
  30. ]
  31. }
  32. }
  33. }
  34. // 查询结果
  35. {
  36. "took": 8,
  37. "timed_out": false,
  38. "_shards": {
  39. "total": 1,
  40. "successful": 1,
  41. "skipped": 0,
  42. "failed": 0
  43. },
  44. "hits": {
  45. "total": {
  46. "value": 1,
  47. "relation": "eq"
  48. },
  49. "max_score": 0.0,
  50. "hits": [
  51. {
  52. "_index": "pdi_cust",
  53. "_type": "_doc",
  54. "_id": "tr_rd_01",
  55. "_score": 0.0,
  56. "_source": {
  57. "RCRD_ID": "tr_rd_01",
  58. "STATE": "PDOS",
  59. "BUSI_CODE": "pdi"
  60. },
  61. "inner_hits": {
  62. "LOANS": {
  63. "hits": {
  64. "total": {
  65. "value": 1,
  66. "relation": "eq"
  67. },
  68. "max_score": 0.0,
  69. "hits": [
  70. {
  71. "_index": "pdi_cust",
  72. "_type": "_doc",
  73. "_id": "tr_rd_01",
  74. "_nested": {
  75. "field": "LOANS",
  76. "offset": 0
  77. },
  78. "_score": 0.0,
  79. "_source": {
  80. "CUST_NUM": "CUST_NUM_01",
  81. "DATA_SRC": "VALD",
  82. "LOAN_BAL_SUM": "1111",
  83. "LOAN_NUM": "LOAN_NUM_01",
  84. "OVD_MONEY_SUM": "1111",
  85. "PUB_CUST_LABEL": "张三 李四 王五"
  86. }
  87. }
  88. ]
  89. }
  90. }
  91. }
  92. }
  93. ]
  94. }
  95. }

score 为0则表示没有计算得分;

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

  1. // dsl
  2. {
  3. "_source":["RCRD_ID", "STATE", "BUSI_CODE"]
  4. , "query":{
  5. "bool":{
  6. "filter":[
  7. {
  8. "match":{
  9. "STATE":"PDOS"
  10. }
  11. }
  12. , {
  13. "nested":{
  14. "path":"LOANS"
  15. , "query":{
  16. "bool":{
  17. "filter":[
  18. {
  19. "match": {
  20. "LOANS.PUB_CUST_LABEL": "张三 李四"
  21. }
  22. }
  23. ]
  24. }
  25. }
  26. , "inner_hits": {
  27. }
  28. }
  29. }
  30. ]
  31. }
  32. }
  33. }
  34. // 结果
  35. {
  36. "took": 35,
  37. "timed_out": false,
  38. "_shards": {
  39. "total": 1,
  40. "successful": 1,
  41. "skipped": 0,
  42. "failed": 0
  43. },
  44. "hits": {
  45. "total": {
  46. "value": 3,
  47. "relation": "eq"
  48. },
  49. "max_score": 0.0,
  50. "hits": [
  51. {
  52. "_index": "pdi_cust",
  53. "_type": "_doc",
  54. "_id": "tr_rd_01",
  55. "_score": 0.0,
  56. "_source": {
  57. "RCRD_ID": "tr_rd_01",
  58. "STATE": "PDOS",
  59. "BUSI_CODE": "pdi"
  60. },
  61. "inner_hits": {
  62. "LOANS": {
  63. "hits": {
  64. "total": {
  65. "value": 2,
  66. "relation": "eq"
  67. },
  68. "max_score": 0.0,
  69. "hits": [
  70. {
  71. "_index": "pdi_cust",
  72. "_type": "_doc",
  73. "_id": "tr_rd_01",
  74. "_nested": {
  75. "field": "LOANS",
  76. "offset": 0
  77. },
  78. "_score": 0.0,
  79. "_source": {
  80. "CUST_NUM": "CUST_NUM_01",
  81. "DATA_SRC": "VALD",
  82. "LOAN_BAL_SUM": "1111",
  83. "LOAN_NUM": "LOAN_NUM_01",
  84. "OVD_MONEY_SUM": "1111",
  85. "PUB_CUST_LABEL": "张三 李四 王五"
  86. }
  87. },
  88. {
  89. "_index": "pdi_cust",
  90. "_type": "_doc",
  91. "_id": "tr_rd_01",
  92. "_nested": {
  93. "field": "LOANS",
  94. "offset": 1
  95. },
  96. "_score": 0.0,
  97. "_source": {
  98. "CUST_NUM": "CUST_NUM_01",
  99. "DATA_SRC": "VALD",
  100. "LOAN_BAL_SUM": "2222",
  101. "LOAN_NUM": "LOAN_NUM_02",
  102. "OVD_MONEY_SUM": "2222",
  103. "PUB_CUST_LABEL": "张三2 李四2 王五2"
  104. }
  105. }
  106. ]
  107. }
  108. }
  109. }
  110. },
  111. {
  112. "_index": "pdi_cust",
  113. "_type": "_doc",
  114. "_id": "tr_rd_02",
  115. "_score": 0.0,
  116. "_source": {
  117. "RCRD_ID": "tr_rd_02",
  118. "STATE": "PDOS",
  119. "BUSI_CODE": "pdi"
  120. },
  121. "inner_hits": {
  122. "LOANS": {
  123. "hits": {
  124. "total": {
  125. "value": 2,
  126. "relation": "eq"
  127. },
  128. "max_score": 0.0,
  129. "hits": [
  130. {
  131. "_index": "pdi_cust",
  132. "_type": "_doc",
  133. "_id": "tr_rd_02",
  134. "_nested": {
  135. "field": "LOANS",
  136. "offset": 0
  137. },
  138. "_score": 0.0,
  139. "_source": {
  140. "CUST_NUM": "CUST_NUM_02",
  141. "DATA_SRC": "VALD",
  142. "LOAN_BAL_SUM": "1113",
  143. "LOAN_NUM": "LOAN_NUM_3",
  144. "OVD_MONEY_SUM": "1113",
  145. "PUB_CUST_LABEL": "李四"
  146. }
  147. },
  148. {
  149. "_index": "pdi_cust",
  150. "_type": "_doc",
  151. "_id": "tr_rd_02",
  152. "_nested": {
  153. "field": "LOANS",
  154. "offset": 1
  155. },
  156. "_score": 0.0,
  157. "_source": {
  158. "CUST_NUM": "CUST_NUM_02",
  159. "DATA_SRC": "VALD",
  160. "LOAN_BAL_SUM": "1114",
  161. "LOAN_NUM": "LOAN_NUM_4",
  162. "OVD_MONEY_SUM": "1114",
  163. "PUB_CUST_LABEL": "张三"
  164. }
  165. }
  166. ]
  167. }
  168. }
  169. }
  170. },
  171. {
  172. "_index": "pdi_cust",
  173. "_type": "_doc",
  174. "_id": "tr_rd_03",
  175. "_score": 0.0,
  176. "_source": {
  177. "RCRD_ID": "tr_rd_03",
  178. "STATE": "PDOS",
  179. "BUSI_CODE": "pdi"
  180. },
  181. "inner_hits": {
  182. "LOANS": {
  183. "hits": {
  184. "total": {
  185. "value": 2,
  186. "relation": "eq"
  187. },
  188. "max_score": 0.0,
  189. "hits": [
  190. {
  191. "_index": "pdi_cust",
  192. "_type": "_doc",
  193. "_id": "tr_rd_03",
  194. "_nested": {
  195. "field": "LOANS",
  196. "offset": 0
  197. },
  198. "_score": 0.0,
  199. "_source": {
  200. "CUST_NUM": "CUST_NUM_03",
  201. "DATA_SRC": "VALD",
  202. "LOAN_BAL_SUM": "1115",
  203. "LOAN_NUM": "LOAN_NUM_5",
  204. "OVD_MONEY_SUM": "1115",
  205. "PUB_CUST_LABEL": "李四 王五"
  206. }
  207. },
  208. {
  209. "_index": "pdi_cust",
  210. "_type": "_doc",
  211. "_id": "tr_rd_03",
  212. "_nested": {
  213. "field": "LOANS",
  214. "offset": 1
  215. },
  216. "_score": 0.0,
  217. "_source": {
  218. "CUST_NUM": "CUST_NUM_03",
  219. "DATA_SRC": "VALD",
  220. "LOAN_BAL_SUM": "1116",
  221. "LOAN_NUM": "LOAN_NUM_6",
  222. "OVD_MONEY_SUM": "1116",
  223. "PUB_CUST_LABEL": "张三"
  224. }
  225. }
  226. ]
  227. }
  228. }
  229. }
  230. }
  231. ]
  232. }
  233. }

以上dsl,把 match 换位 term, 查询不到任何结果,因为 PUB_CUST_LABEL 是 text 类型,分词了,term是精确匹配;

 

3、使用 must+term, 实现计算得分并精确匹配(查询效率低于 filter+term),因为 must要计算匹配得分

  1. // dsl
  2. {
  3. "_source":["RCRD_ID", "STATE", "BUSI_CODE"]
  4. , "query":{
  5. "bool":{
  6. "must":[
  7. {
  8. "term":{
  9. "STATE":"PDOS"
  10. }
  11. }
  12. , {
  13. "nested":{
  14. "path":"LOANS"
  15. , "query":{
  16. "bool":{
  17. "must":[
  18. {
  19. "term": {
  20. "LOANS.LOAN_NUM": "LOAN_NUM_01"
  21. }
  22. }
  23. ]
  24. }
  25. }
  26. , "inner_hits": {
  27. }
  28. }
  29. }
  30. ]
  31. }
  32. }
  33. }
  34. // 结果
  35. {
  36. "took": 13,
  37. "timed_out": false,
  38. "_shards": {
  39. "total": 1,
  40. "successful": 1,
  41. "skipped": 0,
  42. "failed": 0
  43. },
  44. "hits": {
  45. "total": {
  46. "value": 1,
  47. "relation": "eq"
  48. },
  49. "max_score": 1.6739764,
  50. "hits": [
  51. {
  52. "_index": "pdi_cust",
  53. "_type": "_doc",
  54. "_id": "tr_rd_01",
  55. "_score": 1.6739764,
  56. "_source": {
  57. "RCRD_ID": "tr_rd_01",
  58. "STATE": "PDOS",
  59. "BUSI_CODE": "pdi"
  60. },
  61. "inner_hits": {
  62. "LOANS": {
  63. "hits": {
  64. "total": {
  65. "value": 1,
  66. "relation": "eq"
  67. },
  68. "max_score": 1.5404451,
  69. "hits": [
  70. {
  71. "_index": "pdi_cust",
  72. "_type": "_doc",
  73. "_id": "tr_rd_01",
  74. "_nested": {
  75. "field": "LOANS",
  76. "offset": 0
  77. },
  78. "_score": 1.5404451,
  79. "_source": {
  80. "CUST_NUM": "CUST_NUM_01",
  81. "DATA_SRC": "VALD",
  82. "LOAN_BAL_SUM": "1111",
  83. "LOAN_NUM": "LOAN_NUM_01",
  84. "OVD_MONEY_SUM": "1111",
  85. "PUB_CUST_LABEL": "张三 李四 王五"
  86. }
  87. }
  88. ]
  89. }
  90. }
  91. }
  92. }
  93. ]
  94. }
  95. }

4、使用must+match实现计算得分且走倒排索引查询或模糊查询

  1. // dsl
  2. {
  3. "_source":["RCRD_ID", "STATE", "BUSI_CODE"]
  4. , "query":{
  5. "bool":{
  6. "must":[
  7. {
  8. "match":{
  9. "STATE":"PDOS"
  10. }
  11. }
  12. , {
  13. "nested":{
  14. "path":"LOANS"
  15. , "query":{
  16. "bool":{
  17. "must":[
  18. {
  19. "match": {
  20. "LOANS.LOAN_NUM": "LOAN_NUM_01"
  21. }
  22. }
  23. ]
  24. }
  25. }
  26. , "inner_hits": {
  27. }
  28. }
  29. }
  30. ]
  31. }
  32. }
  33. }
  34. //结果
  35. {
  36. "took": 10,
  37. "timed_out": false,
  38. "_shards": {
  39. "total": 1,
  40. "successful": 1,
  41. "skipped": 0,
  42. "failed": 0
  43. },
  44. "hits": {
  45. "total": {
  46. "value": 1,
  47. "relation": "eq"
  48. },
  49. "max_score": 1.6739764,
  50. "hits": [
  51. {
  52. "_index": "pdi_cust",
  53. "_type": "_doc",
  54. "_id": "tr_rd_01",
  55. "_score": 1.6739764,
  56. "_source": {
  57. "RCRD_ID": "tr_rd_01",
  58. "STATE": "PDOS",
  59. "BUSI_CODE": "pdi"
  60. },
  61. "inner_hits": {
  62. "LOANS": {
  63. "hits": {
  64. "total": {
  65. "value": 1,
  66. "relation": "eq"
  67. },
  68. "max_score": 1.5404451,
  69. "hits": [
  70. {
  71. "_index": "pdi_cust",
  72. "_type": "_doc",
  73. "_id": "tr_rd_01",
  74. "_nested": {
  75. "field": "LOANS",
  76. "offset": 0
  77. },
  78. "_score": 1.5404451,
  79. "_source": {
  80. "CUST_NUM": "CUST_NUM_01",
  81. "DATA_SRC": "VALD",
  82. "LOAN_BAL_SUM": "1111",
  83. "LOAN_NUM": "LOAN_NUM_01",
  84. "OVD_MONEY_SUM": "1111",
  85. "PUB_CUST_LABEL": "张三 李四 王五"
  86. }
  87. }
  88. ]
  89. }
  90. }
  91. }
  92. }
  93. ]
  94. }
  95. }

【小结】

1、对于 keyword类型的字段而言, 用 term 和 match 都是可以查询的;但对于 text 类型的分词字段而言,只能用match 才能够查询到结果;

2、根据嵌套类型查询  (filter 与 must 是属于同一个级别的查询方式,都可以作为 query->bool  的属性)
2.1、filter: 不计算评分, 查询效率高;有缓存;  (推荐)
    + term: 精确匹配;
    + match: 模糊匹配, 倒排索引;
2.2、must: 要计算评分,查询效率低;无缓存;
    +term: 精确匹配 , 要评分;
    +match:模糊匹配, 要评分;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/750623
推荐阅读
相关标签
  

闽ICP备14008679号