赞
踩
【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:模糊匹配, 要评分;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。