當前位置:成語大全網 - 漢語詞典 - 彈性搜索第七次搜索詳解

彈性搜索第七次搜索詳解

查詢階段

應向所有碎片的副本/主服務器發送請求。如果每個碎片有多個副本,那麽並發搜索請求可以同時發送給其他副本。

搜索的參數都差不多。北京是本文檔_all字段的值,分詞後建立對應的倒排索引。

DSL-領域指定語言,壹種特殊的領域語言。

請求參數由請求主體傳遞。在Elasticsearch中,請求主體的字符集默認為UTF-8。

查詢字符串後的參數越多,搜索條件越復雜,無法滿足需求。

DSL:特定領域語言,壹種特定領域的語言。

Es獨特的搜索語言,可以在請求體中攜帶搜索條件,功能強大。

查詢所有GET /book/_search

排序GET /book/_search?排序=價格:desc

分頁查詢GET /book/_search?size = 10 & amp;from=0

指定返回字段GET /book/ _search?_ source =名稱,研究模型

通過組合上述各種類型的查詢,實現了復雜的查詢。

搜索要求:標題必須包含elasticsearch,內容可以包含也可以不包含elasticsearch,author_id不能是111。

初始數據:

搜索:

返回:

更復雜的搜索要求:

select * from test_index其中name = ' Tom ' or(hired = true and(personality = ' good ' and rude!=真))

重新創建圖書索引

插入數據

搜索

相關性得分算法,簡單來說就是計算壹個索引中的文本與搜索文本的相關匹配程度。

Elasticsearch使用$ TERM頻率/逆文檔頻率算法,簡稱TF/IDF算法。TF詞頻($ Term頻率),IDF反向文檔頻率(IDF反向文檔頻率)

$ Term頻率:搜索文本中的每個條目在字段文本中出現多少次?出現的次數越多,相關性越強。

示例:搜索請求:hello world

doc1:妳好妳我,世界很好。

醫生2:妳好,妳好嗎

逆文檔頻率:搜索文本中的每個條目在整個索引的所有文檔中出現的次數,出現次數越多,相關度越低。

示例:搜索請求:hello world

doc1:妳好,今天很好

醫生2:嗨,世界,妳好嗎

整個指數有1億條數據。hello有1000個文檔,world有100個文檔。

文件2更相關

字段長度規範:字段長度,字段越長,相關性越弱。

示例:搜索請求:hello world

Doc 1: { "標題":"妳好文章","內容":" balabalabal 10000件" }

Doc 2: {"title": "myarticle "," content ":" balabalabal 65438+壹萬,世界" }

返回

搜索的時候,要依靠倒排索引;在排序時,需要依靠正字法索引來查看每個文檔的每個字段,然後進行排序。所謂的正字法指標,其實就是doc值。

建立索引時,壹方面會建立倒排索引進行搜索;壹方面,將建立正交索引,即doc值,用於排序、聚合、過濾等操作。

Doc值保存在磁盤上。此時如果內存足夠,os會自動緩存在內存中,性能依然會很高。如果沒有足夠的內存,操作系統會將其寫入磁盤。

倒排索引

doc1:妳好世界妳和我

醫生2:嗨,世界,妳好嗎

搜索時:

妳好-& gt;妳好

妳好-& gt;doc1

妳-& gt;文件1,文件2

doc1:妳好世界妳和我

醫生2:嗨,世界,妳好嗎

排序方式有問題。

正交索引

doc1: { "姓名":"傑克","年齡":27 }

文件2: { "姓名":"湯姆","年齡":30 }

對於常規搜索,如果沒有添加from和size,默認情況下將搜索前10個項目,並按_score排序。

短語檢索。要求查詢條件必須完全匹配特定數據才能成為搜索結果。其特征在於:1-搜索條件不進行任何分詞分析;2-在搜索字段對應的倒排索引(正排索引)中精確匹配不再是簡單的全文搜索。

確定將使用哪個碎片來執行搜索操作。

_primary,_primary_first,_local,_only_node:xyz,_ prefere _ node:XYZ,_shards:2,3

彈跳結果問題,兩個文檔都排序了,而且字段值相同;在不同的分片上,順序可能不同;每個輪詢請求都針對不同的副本碎片;妳在頁面上看到的搜索結果的排名每次都不壹樣。這是彈跳的結果,是跳躍的結果。

在搜索時,搜索請求通過輪詢發送到每個副本碎片(主碎片),但是不同碎片上的文檔排序可能不同。

解決方案是將首選項設置為壹個字符串,比如user_id,這樣每個用戶都將使用相同的副本碎片來執行每次搜索,這樣您就不會看到跳躍的結果。

主要限於某壹段時間,獲取的部分數據會直接返回,避免查詢時間過長。

Document文檔路由,_id路由,routing=user_id,這樣就可以將同壹用戶對應的數據發送到壹個shard。

默認值:query_then_fetch

Dfs_query_then_fetch可以提高相關排序的準確性。