ElasticSearch使用(嵌套查詢、嵌套高亮)

嵌套查詢

當ES的一條文檔中的數據是一個數組,數組中有多個對象時,普通的查詢不再適用,比如:

{
    "_index" : "t_trace_index-2019.08.11.15",
    "_type" : "_doc",
    "_id" : "c8fc4f6f0bcd^1565435961237^3980",
    "_score" : 11.434727,
    "_routing" : "c8fc4f6f0bcd^1565435961237^3980",
    "_source" : {
      "type" : "pdoc",
      "calls" : [
        {
          "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"OPER_ID":"10034571"}}""",
          "callee" : "test-busi-ocrm-yyt",
          "caller" : "test-busi-cust-yyt",
          "rpc" : "CSF_SEC_OPERM_OPIDQQUERY_002",
          "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
          "ts" : 1565507717426
        },
        {
          "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
          "caller" : "test-busi-cust-yyt",
          "rpc" : "ocrm_ICbossCSV_idCheck",
          "callee" : "test-busi-ocrm-yyt",
          "ts" : 1565507717915,
          "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RSP_JSON_STR":"{\"IdCheck\":{\"Seq\":\"10020190811151517510040\",\"CustomerName\":\"786382D36B599DF8D3C312272A75AD81\",\"IDCardType\":\"04\",\"IDCardNum\":\"99425ED800E46883C131C544E9F8BAD9\",\"ChannelId\":\"210000000100001\",\"MsOpcode\":\"C8000\"}}"}}"""
        },
        {
          "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
          "caller" : "test-busi-rule-yyt",
          "rpc" : "cust_IOneCardFiveUserCSV_idCheck",
          "callee" : "test-busi-cust-yyt",
          "ts" : 1565507717985,
          "bizParams" : """{"input":{"CERT_CODE":"523453","CODE_TYPE":"CM_CERT_TYPE_CHECKCODE","CUST_NAME":"對方八年","CERT_TYPE":"3","CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}"""
        }
      ],
      "id" : "c8fc4f6f0bcd^1565435961237^3980",
      "timestamp" : 1565507717426,
      "trace_join" : {
        "name" : "pdoc"
      }
    }
}

這時候就需要使用嵌套查詢(nested)

bool 查詢

查詢字句 說明 類型
must 文檔必須匹配must查詢條件(AND) 數組
should 匹配should的一個或多個(OR) 數組
must_not 文檔不能匹配該查詢條件 數組
filter 過濾,文檔需要匹配過濾條件,功能和must一樣,不過filter不參與評分 數組

must、should關係

1、只有must

must中條件必須滿足

2、只有should

沒有must,只有should,那麼should中必須至少匹配一個纔行

3、must和should同時存在

如果must中條件匹配,那麼should可以不匹配,所以如果查詢語句中must、should同時存在,又不設置should最小滿足條數,那麼should條件有時是不會生效的

項目使用場景:
快速定位功能,需要輸入關鍵字和各種過濾條件,關鍵字有三種類型,查詢時,每個關鍵字都需要搜索一遍,考慮的是關鍵字使用should,只要有一種關鍵字類型滿足即可,過濾條件使用must,需要全都滿足,在沒有指定should最小滿足條數時,發現關鍵字可以輸入任意值,只要過濾條件滿足就可以查詢出結果,關鍵字沒有起作用,在增加should最小滿足條數爲1之後,設置should至少滿足一條,查詢結果正確

4、怎樣設置should必須滿足、最小滿足條數

可以設置should中必須匹配多少個,參數"minimum_should_match": "1",也可以設置匹配百分比"minimum_should_match":75%

Java代碼

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.should(QueryBuilders.nestedQuery("calls", QueryBuilders.boolQuery().must(QueryBuilders.matchPhraseQuery("calls.bizParams", keyword)), ScoreMode.Avg));
boolQueryBuilder.should(QueryBuilders.nestedQuery("calls", QueryBuilders.boolQuery().must(QueryBuilders.termQuery("calls.rpc", keyword)), ScoreMode.Avg));
boolQueryBuilder.should(QueryBuilders.nestedQuery("calls", QueryBuilders.boolQuery().must(QueryBuilders.termQuery("calls.traceId", keyword)), ScoreMode.Avg));
// 設置should必須匹配多少條
boolQueryBuilder.minimumShouldMatch(1);

DSL查詢語句

"should": [
{
  "nested": {
    "query": {
      "bool": {
        "must": [
          {
            "match_phrase": {
              "calls.bizParams": {
                "query": "input",
                "slop": 0,
                "zero_terms_query": "NONE",
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "path": "calls",
    "ignore_unmapped": false,
    "score_mode": "avg",
    "boost": 1,
  }
},
{
  "nested": {
    "query": {
      "bool": {
        "must": [
          {
            "term": {
              "calls.rpc": {
                "value": "input",
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "path": "calls",
    "ignore_unmapped": false,
    "score_mode": "avg",
    "boost": 1
  }
},
{
  "nested": {
    "query": {
      "bool": {
        "must": [
          {
            "term": {
              "calls.traceId": {
                "value": "input",
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "path": "calls",
    "ignore_unmapped": false,
    "score_mode": "avg",
    "boost": 1
  }
}
],
"adjust_pure_negative": true,
"minimum_should_match": "1",
"boost": 1

設置should中三個條件至少有一個匹配纔行

查詢高亮

1. 普通查詢高亮

java代碼

HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("calls.bizParams");
//高亮標籤
highlightBuilder.preTags("<em>").postTags("</em>");
//高亮內容長度
highlightBuilder.fragmentSize(200);
// 創建並設置SearchSourceBuilder對象
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.highlighter(highlightBuilder);

DSL查詢語句

{
  "from": 0,
  "size": 5000,
  "timeout": "2000ms",
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "query": {
              "bool": {
                "must": [
                  {
                    "match_phrase": {
                      "calls.bizParams": {
                        "query": "cb47bea067fc^1565266299866^564",
                        "slop": 0,
                        "zero_terms_query": "NONE",
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "path": "calls",
            "ignore_unmapped": false,
            "score_mode": "none",
            "boost": 1
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1,
      "minimum_should_match": "1"
    }
  },
  "highlight": {
    "pre_tags": [
      "<em>"
    ],
    "post_tags": [
      "</em>"
    ],
    "fragment_size": 200,
    "fields": {
      "calls.traceId": {}
    }
  }
}

2. 嵌套查詢高亮

在嵌套查詢時,如果使用普通高亮查詢,會有一個問題,因爲一個文檔數據記錄中可能會有多個對象,所以一條文檔可能會有多個滿足高亮的字段,而普通高亮只會把高亮的字段在數組中羅列出來,並不知道一條高亮字段屬於文檔中的哪個對象

普通DSL查詢語句

{
  "from": 0,
  "size": 5000,
  "timeout": "2000ms",
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "query": {
              "bool": {
                "must": [
                  {
                    "match_phrase": {
                      "calls.traceId": {
                        "query": "cb47bea067fc^1565266299866^564",
                        "slop": 0,
                        "zero_terms_query": "NONE",
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "path": "calls",
            "ignore_unmapped": false,
            "score_mode": "none",
            "boost": 1
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1,
      "minimum_should_match": "1"
    }
  },
  "highlight": {
    "pre_tags": [
      "<em>"
    ],
    "post_tags": [
      "</em>"
    ],
    "fragment_size": 200,
    "fields": {
      "calls.traceId": {}
    }
  }
}

查詢結果:

"hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 2.0,
    "hits" : [
      {
        "_index" : "t_trace_index-2019.08.08.20",
        "_type" : "_doc",
        "_id" : "cb47bea067fc^1565266299866^564",
        "_score" : 2.0,
        "_routing" : "cb47bea067fc^1565266299866^564",
        "_source" : {
          "calls" : [
            {
              "traceId" : "cb47bea067fc^1565266299866^564"
            },
            {
              "traceId" : "cb47bea067fc^1565266299866^564"
            }
          ],
          "id" : "cb47bea067fc^1565266299866^564",
          "timestamp" : 1565268881001,
          "trace_join" : {
            "name" : "pdoc"
          },
          "type" : "pdoc"
        },
        "highlight" : {
          "calls.traceId" : [
            "<em>cb47bea067fc^1565266299866^564</em>",
            "<em>cb47bea067fc^1565266299866^564</em>"
          ]
        }
      }
    ]
}

這裏對traceId字段使用了高亮查詢,可以看到這裏高亮匹配到了兩條,而除了高亮字段外無任何信息,無法知道高亮語句屬於文檔數組中的哪個對象,這種高亮方法只適用於非嵌套查詢,一條文檔中一個對象,高亮字段只會有一個

嵌套查詢高亮代碼

HighlightBuilder highlightBuilder = new HighlightBuilder();
// 高亮字段
highlightBuilder.field("calls.bizParams");
// 高亮標籤
highlightBuilder.preTags("<em>").postTags("</em>");
//highlightBuilder.order("score");
// 高亮內容長度
highlightBuilder.fragmentSize(200);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
// 嵌套查詢使用高亮
boolQueryBuilder.should(QueryBuilders.nestedQuery("calls", QueryBuilders.boolQuery().must(QueryBuilders.matchPhraseQuery("calls.bizParams", keyword)), ScoreMode.Avg).innerHit(new InnerHitBuilder().setHighlightBuilder(highlightBuilder)));
        

嵌套查詢高亮DSL查詢語句

"query": {
    "bool": {
      "must": [
        {
          "nested": {
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "calls.traceId": {
                        "value": "c8fc4f6f0bcd^1565435961237^3980",
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "path": "calls",
            "ignore_unmapped": false,
            "score_mode": "avg",
            "boost": 1
          }
        }
      ],
      "filter": [
        {
          "nested": {
            "query": {
              "range": {
                "calls.ts": {
                  "from": 1564589746707,
                  "to": 1565590046000,
                  "include_lower": true,
                  "include_upper": true,
                  "boost": 1
                }
              }
            },
            "path": "calls",
            "ignore_unmapped": false,
            "score_mode": "none",
            "boost": 1
          }
        }
      ],
      "should": [
        {
          "nested": {
            "query": {
              "bool": {
                "must": [
                  {
                    "match_phrase": {
                      "calls.bizParams": {
                        "query": "input",
                        "slop": 0,
                        "zero_terms_query": "NONE",
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "path": "calls",
            "ignore_unmapped": false,
            "score_mode": "avg",
            "boost": 1,
            "inner_hits": {
              "ignore_unmapped": false,
              "from": 0,
              "size": 3,
              "version": false,
              "seq_no_primary_term": false,
              "explain": false,
              "track_scores": false,
              "highlight": {
                "pre_tags": [
                  "<em>"
                ],
                "post_tags": [
                  "</em>"
                ],
                "fragment_size": 200,
                "fields": {
                  "calls.bizParams": {}
                }
              }
            }
          }
        },
        {
          "nested": {
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "calls.rpc": {
                        "value": "input",
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "path": "calls",
            "ignore_unmapped": false,
            "score_mode": "avg",
            "boost": 1
          }
        },
        {
          "nested": {
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "calls.traceId": {
                        "value": "input",
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "path": "calls",
            "ignore_unmapped": false,
            "score_mode": "avg",
            "boost": 1
          }
        }
      ],
      "adjust_pure_negative": true,
      "minimum_should_match": "1",
      "boost": 1
    }
}

查詢結果,爲了減小篇幅,刪除無意義字段:

{
  "took" : 42,
  "timed_out" : false,
  "_shards" : {
    "total" : 430,
    "successful" : 430,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 11.434727,
    "hits" : [
      {
        "_index" : "t_trace_index-2019.08.11.15",
        "_type" : "_doc",
        "_id" : "c8fc4f6f0bcd^1565435961237^3980",
        "_score" : 11.434727,
        "_routing" : "c8fc4f6f0bcd^1565435961237^3980",
        "_source" : {
          "type" : "pdoc",
          "calls" : [
            {
              "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"OPER_ID":"10034571"}}""",
              "rpc" : "CSF_SEC_OPERM_OPIDQQUERY_002",
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "ts" : 1565507717426
            },
            {
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "rpc" : "ocrm_ICbossCSV_idCheck",
              "ts" : 1565507717915,
              "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RSP_JSON_STR":"{\"IdCheck\":{\"Seq\":\"10020190811151517510040\",\"CustomerName\":\"786382D36B599DF8D3C312272A75AD81\",\"IDCardType\":\"04\",\"IDCardNum\":\"99425ED800E46883C131C544E9F8BAD9\",\"ChannelId\":\"210000000100001\",\"MsOpcode\":\"C8000\"}}"}}"""
            },
            {
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "rpc" : "cust_IOneCardFiveUserCSV_idCheck",
              "ts" : 1565507717985,
              "bizParams" : """{"input":{"CERT_CODE":"523453","CODE_TYPE":"CM_CERT_TYPE_CHECKCODE","CUST_NAME":"對方八年","CERT_TYPE":"3","CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}"""
            },
            {
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "rpc" : "cust_IBackListCSV_queryBlackInfo",
              "bizParams" : """{"input":{"CERT_CODE":"523453","START_NUM":-1,"CERT_TYPE":3,"PARTY_NAME":"","END_NUM":-1,"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}""",
              "ts" : 1565507717360
            },
            {
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "rpc" : "cust_IRealNameCSV_getRealNameCountByPhoneOrIden",
              "ts" : 1565507717409,
              "bizParams" : """{"input":{"CERT_CODE":"523453","BILL_ID":"","CERT_TYPE":"3","CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}"""
            },
            {
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "rpc" : "CSF_RULE_COMMON_RULESCHECK_001",
              "ts" : 1565507717366,
              "bizParams" : """{"input":{"RULE_MAP":{"ORDER_OBJ_MAP":{"CUST_DC":{"CUST_CERT_TYPE":"3","CUST_NAME":"對方八年","CUST_CERT_CODE":"523453"}}},"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RULE_IDS":"100001049"}}"""
            },
            {
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "rpc" : "CSF_RULE_COMMON_RULESCHECK_001",
              "ts" : 1565507717992,
              "bizParams" : """{"input":{"RULE_MAP":{"ORDER_OBJ_MAP":{"CUST_DC":{"CUST_CERT_TYPE":"3","CUST_NAME":"對方八年","CUST_CERT_CODE":"523453"}}},"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RULE_IDS":"100060110"}}"""
            },
            {
              "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
              "rpc" : "/web-crm/",
              "ts" : 1565507718017
            }
          ],
          "id" : "c8fc4f6f0bcd^1565435961237^3980",
          "timestamp" : 1565507717426,
          "trace_join" : {
            "name" : "pdoc"
          }
        },
        "inner_hits" : {
          "calls" : {
            "hits" : {
              "total" : {
                "value" : 7,
                "relation" : "eq"
              },
              "max_score" : 9.85075E-6,
              "hits" : [
                {
                  "_index" : "t_trace_index-2019.08.11.15",
                  "_type" : "_doc",
                  "_id" : "c8fc4f6f0bcd^1565435961237^3980",
                  "_nested" : {
                    "field" : "calls",
                    "offset" : 0
                  },
                  "_score" : 9.85075E-6,
                  "_source" : {
                    "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"OPER_ID":"10034571"}}""",
                    "rpc" : "CSF_SEC_OPERM_OPIDQQUERY_002",
                    "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
                    "ts" : 1565507717426
                  },
                  "highlight" : {
                    "calls.bizParams" : [
                      """{"<em>input</em>":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"OPER_ID":"10034571"}}"""
                    ]
                  }
                },
                {
                  "_index" : "t_trace_index-2019.08.11.15",
                  "_type" : "_doc",
                  "_id" : "c8fc4f6f0bcd^1565435961237^3980",
                  "_nested" : {
                    "field" : "calls",
                    "offset" : 1
                  },
                  "_score" : 9.85075E-6,
                  "_source" : {
                    "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
                    "rpc" : "ocrm_ICbossCSV_idCheck",
                    "ts" : 1565507717915,
                    "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RSP_JSON_STR":"{\"IdCheck\":{\"Seq\":\"10020190811151517510040\",\"CustomerName\":\"786382D36B599DF8D3C312272A75AD81\",\"IDCardType\":\"04\",\"IDCardNum\":\"99425ED800E46883C131C544E9F8BAD9\",\"ChannelId\":\"210000000100001\",\"MsOpcode\":\"C8000\"}}"}}"""
                  },
                  "highlight" : {
                    "calls.bizParams" : [
                      """{"<em>input</em>":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RSP_JSON_STR":"{\"IdCheck\":{\"Seq\":\"10020190811151517510040\",\"CustomerName\":\"786382D36B599DF8D3C312272A75AD81\",\"IDCardType\":\"04\",\""""
                    ]
                  }
                },
                {
                  "_index" : "t_trace_index-2019.08.11.15",
                  "_type" : "_doc",
                  "_id" : "c8fc4f6f0bcd^1565435961237^3980",
                  "_nested" : {
                    "field" : "calls",
                    "offset" : 2
                  },
                  "_score" : 9.85075E-6,
                  "_source" : {
                    "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
                    "rpc" : "cust_IOneCardFiveUserCSV_idCheck",
                    "ts" : 1565507717985,
                    "bizParams" : """{"input":{"CERT_CODE":"523453","CODE_TYPE":"CM_CERT_TYPE_CHECKCODE","CUST_NAME":"對方八年","CERT_TYPE":"3","CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}"""
                  },
                  "highlight" : {
                    "calls.bizParams" : [
                      """{"<em>input</em>":{"CERT_CODE":"523453","CODE_TYPE":"CM_CERT_TYPE_CHECKCODE","CUST_NAME":"對方八年","CERT_TYPE":"3","CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}"""
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    ]
  }
}

這裏對bizParams字段使用嵌套高亮查詢,注意看這裏的結果和前面查詢結果的區別,可以看到查詢結果中有inner_hits這個字段

"inner_hits" : {
  "calls" : {
    "hits" : {
      "total" : {
        "value" : 7,
        "relation" : "eq"
      },
      "max_score" : 9.85075E-6,
      "hits" : [
        {
          "_index" : "t_trace_index-2019.08.11.15",
          "_type" : "_doc",
          "_id" : "c8fc4f6f0bcd^1565435961237^3980",
          "_nested" : {
            "field" : "calls",
            "offset" : 0
          },
          "_score" : 9.85075E-6,
          "_source" : {
            "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"OPER_ID":"10034571"}}""",
            "rpc" : "CSF_SEC_OPERM_OPIDQQUERY_002",
            "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
            "ts" : 1565507717426
          },
          "highlight" : {
            "calls.bizParams" : [
              """{"<em>input</em>":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"OPER_ID":"10034571"}}"""
            ]
          }
        },
        {
          "_index" : "t_trace_index-2019.08.11.15",
          "_type" : "_doc",
          "_id" : "c8fc4f6f0bcd^1565435961237^3980",
          "_nested" : {
            "field" : "calls",
            "offset" : 1
          },
          "_score" : 9.85075E-6,
          "_source" : {
            "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
            "rpc" : "ocrm_ICbossCSV_idCheck",
            "ts" : 1565507717915,
            "bizParams" : """{"input":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RSP_JSON_STR":"{\"IdCheck\":{\"Seq\":\"10020190811151517510040\",\"CustomerName\":\"786382D36B599DF8D3C312272A75AD81\",\"IDCardType\":\"04\",\"IDCardNum\":\"99425ED800E46883C131C544E9F8BAD9\",\"ChannelId\":\"210000000100001\",\"MsOpcode\":\"C8000\"}}"}}"""
          },
          "highlight" : {
            "calls.bizParams" : [
              """{"<em>input</em>":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"RSP_JSON_STR":"{\"IdCheck\":{\"Seq\":\"10020190811151517510040\",\"CustomerName\":\"786382D36B599DF8D3C312272A75AD81\",\"IDCardType\":\"04\",\""""
            ]
          }
        },
        {
          "_index" : "t_trace_index-2019.08.11.15",
          "_type" : "_doc",
          "_id" : "c8fc4f6f0bcd^1565435961237^3980",
          "_nested" : {
            "field" : "calls",
            "offset" : 2
          },
          "_score" : 9.85075E-6,
          "_source" : {
            "traceId" : "c8fc4f6f0bcd^1565435961237^3980",
            "rpc" : "cust_IOneCardFiveUserCSV_idCheck",
            "ts" : 1565507717985,
            "bizParams" : """{"input":{"CERT_CODE":"523453","CODE_TYPE":"CM_CERT_TYPE_CHECKCODE","CUST_NAME":"對方八年","CERT_TYPE":"3","CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}"""
          },
          "highlight" : {
            "calls.bizParams" : [
              """{"<em>input</em>":{"CERT_CODE":"523453","CODE_TYPE":"CM_CERT_TYPE_CHECKCODE","CUST_NAME":"對方八年","CERT_TYPE":"3","CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]}}}"""
            ]
          }
        }
      ]
    }
  }
}

這裏面就是高亮命中的信息,每有一條高亮數據命中,在inner_hitshit數組中,都會有一條命中對象,相當於把數組中命中的對象字段高亮之後生成了一個新的對象,包括:

位置信息:

"_nested" : {
    "field" : "calls",
    "offset" : 0
}

offset:高亮命中數據在查詢命中結果中的位置,這裏表示高亮對象在查詢結果中排在第一位,就可以根據這個位置對原來對象中的屬性進行修改,例如使用高亮後字段替換原來的字段

高亮後的字段:

"highlight" : {
    "calls.bizParams" : [
      """{"<em>input</em>":{"CONTROL_IN_PARAM":{"DATA_STATE":["DATA_ALL"]},"OPER_ID":"10034571"}}"""
    ]
}


等其他的信息,這個可以按需瞭解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章