3 Elasticsearch深入搜尋 部分匹配

2021-10-10 23:07:40 字數 1908 閱讀 7503

elasticsearch認證複習準備

##部分匹配概念:

指定查詢詞的一部分並找出所有包含這部分片段的詞。簡單來說就是我輸入elas直接能給我匹配到elasticsearch這個詞。

##使用場景

*匹配郵編、產品序列號或其他 not_analyzed 未分析值,這些值可以是以某個特定字首開始,也可以是與某種模式匹配的,甚至可以是與某個正則式相匹配的。

*輸入即搜尋(search-as-you-type) ——在使用者鍵入搜尋詞過程的同時就呈現最可能的結果。

*匹配如德語或荷蘭語這樣有長組合詞的語言,如: weltgesundheitsorganisation 。(好多個詞組成乙個大詞,這種我輸入這個大詞中的某幾個字元就可以匹配到整個大詞)

字首查詢

get /my_index/address/_search}}

注:prefix 查詢不做相關度評分計算,它只是將所有匹配的文件返回,並為每條結果賦予評分值 1。字首查詢會遍歷所有的倒排索引term項,可見如果資料量很大時,效能會很差,一般只在資料量少時使用

2、萬用字元查詢

get /my_index/address/_search}}

3、正規表示式查詢

get /my_index/address/_search}}

注:wildcard 和 regexp 查詢的工作方式與 prefix 查詢完全一樣,它們也需要掃瞄倒排索引中的詞列表才能找到所有匹配的詞,然後依次獲取每個詞相關的文件 id ,與 prefix 查詢的唯一不同是:它們能支援更為複雜的匹配模式。這也意味著需要同樣注意字首查詢存在效能問題,對有很多唯一詞的字段執行這些查詢可能會消耗非常多的資源,所以要避免使用左通配這樣的模式匹配(如: *foo 或 .*foo 這樣的正則式)。

查詢時輸入及搜尋(search as you type)

get /megacorp/employee/_search}}

get /megacorp/employee/_search}}

}注:這種查詢的行為與 match_phrase 查詢一致,不同的是它將查詢字串的最後乙個詞作為字首使用,上方的例子就是說「i 跟著 love 跟著 to 跟著 go 跟著 r開頭的term」

索引時輸入及搜尋

put /my_index #定義分析器

},"analyzer": }}

}}get /my_index/_analyze?analyzer=autocomplete  #測試下自定義的分析器

注:通過分析的結果就可以知道這個為啥能用字首匹配了。犧牲了寫效能和磁碟空間,直接把所有的字首都列出來了。和上方那種查詢即搜尋不同的是這個只在索引資料時慢一次。}}

}注:使用自定義的分析器,索引資料時使用autocomplete分析器,查詢時使用standard分析器

get /my_index/my_type/_search  #測試下吧}}

}注:上方的term如何生成通過分析器的即可看出,用的時候,有時可能會需要指定analyzer代替預設的字段分析器,以提高準確性。

put /my_index     #參考用的定義分析器的例子,可以更好的使用字首查詢

},"analyzer": ,

"postcode_search": }}

}}注:其實本節這些功能雖然可用,但是仍然還是比較慢的。自動補全(甚至搜尋糾錯)的功能還是用elasticsearch suggester,速度快好幾倍。因為還是比較實用,另開乙個文件。

ngrams 在複合詞的應用

put /my_index #定義ngrams分析器

},"analyzer": }}

},"my_type": }}

}}get /my_index/_analyze?analyzer=trigrams  #測試下新的分析器

get /my_index/my_type/_search  #查詢測試}}

}

3 Elasticsearch深入搜尋 多欄位搜尋

elasticsearch認證複習準備 多欄位搜尋概念 用相同或不同的字串查詢乙個或多個字段 多字串查詢 get search 注 兩條語句同時匹配的文件比只與一條語句匹配的文件得分要高 get search 注 should中前兩個語句權重佔到了4 5 最佳字段搜尋 get search 注 將任...

快取大小 Elasticsearch 快取深入詳解

elasticsearch 查詢的響應需要占用 cpu 記憶體資源,在複雜業務場景,會出現慢查詢,需要花費大量的時間。如何破局呢?增加集群硬體配置會有高昂硬體開銷。還有沒有其他方案呢?這時候會想到 快取。elasticsearch 有哪些快取,不同快取的應用場景是什麼呢?本文給出答案。以上問題都是實...

Elasticsearch 內部資料結構深度解讀

正如 elastic 官方文件所說 elasticsearch 特點之一是 分布式文件儲存。elasticsearch不會將資訊儲存為類似列資料庫的行 row 而是儲存為已序列化為json文件的複雜資料結構。當集群中有多個elasticsearch節點時,儲存的文件會分布在整個集群中,並且可以從任何...