ELK-ElasticSearch-查詢

查詢msg字段中包含 receive order signal 和 -2 的信息,(不要包含2的,只要-2的)數據結構

1.普通query:spa

  1. {
  2.   "query": {
  3.     "bool": {
  4.       "must": [
  5.         {
  6.           "match_phrase": {
  7.             "msg": "\\-2"
  8.           }
  9.         },
  10.         {
  11.           "match":{"msg":"receive order signal"}
  12.         }
  13.       ]
  14.     }
  15.   }
  16. }
  17. 這種方式可能會查詢出2和-2的msg,由於es默認的分詞器(標準分詞器)在分詞時,會刪除特殊字符

 

2.使用query_string排序

  1. {
  2.   "query":{
  3.     "query_string" : {
  4.             "default_field" : "msg",
  5.             "analyzer" : "whitespace",
  6.             "query" : "\\-2 AND receive AND order AND signal"
  7.         } 
  8.     }
  9. }
  10. 這種方式仍是不行,緣由應該和上面同樣

 

3.使用keyword字段:索引

  1. {
  2.   "query": {
  3.     "wildcard": {
  4.       "msg.keyword": {
  5.         "value": "*receive*order*signal*-2*"
  6.       }
  7.     }
  8.   }
  9. }
  10. Wildcard模糊匹配查詢(*),查詢msg的keyword字段


解析:內存

對於text類型的字段,es使用了一種基於內存的數據結構:fielddata來實現相似於正排索引的功能,以達到加速排序和聚合的目的。它是經過讀取磁盤上的每一個 segment(片斷)的整個反向索引來構建的,將 term(詞條)和 document(文檔)關係反轉,並將結果存儲在內存中,在JVM的堆中。它默認是關閉的,由於它太佔用內存。文檔

而doc_value也是一個相似於正排索引的結構,它對大多數字段都是默認開啓的(text字段不持之),而且數據類型爲keyword,它不會建立分詞,直接存儲在磁盤上,所以匹配查詢時,是能夠使用keyword字段的。string

相關文章
相關標籤/搜索