詳解全文檢索的boolQuery複雜檢索

2021-10-13 13:00:48 字數 1649 閱讀 9548

先來熟querybuilders這個類封裝的基本查詢

通常都是將多個查詢條件組合在一起,常用的有must、must_not、should

查詢1:查詢address 必須包含』汽車』 或者』水果』的,查詢id必須不能包含』2』和』0』的。

此時需要構造兩個條件,類似mysql中的 where (address like %汽車% or

address like %水果% ) and (id != 1 or id != 2)

@test

public

void

testboolquery()

throws ioexception

}

檢視日誌列印

為什麼address中包含汽車的得分高於包含水果的,因為包含汽車的address欄位的值有5個字元,包含水果的address字段值包含9個字元,字元越少的,得分越高。

之前在must條件中是這麼寫的

後來發現一直查不到資料,發現這樣寫不對,我們查詢需求是:address必須包含『汽車』或者『水果的』,但如果這樣寫的話就成了address中既要匹配『水果』又要匹配,顯然沒有哪個address字段值既包含水果又包含汽車的,所以查詢不到。

查詢2:查詢address 必須包含』汽車』 或者』水果』的,查詢id必須不能包含』2』和』0』的。name最好是包含 '東方』的。這個最好包含是有最好,沒有也無所謂,此時需要用should來封裝。

@test

public

void

testboolquery()

throws ioexception

}

檢視日誌

此時,在should中指定的條件name中包含東方的,分數就提高了。

如果我們將must條件修改為一下,則還是會查詢不到資料,因為沒有一條文件的address包含『汽車』或『水果』同時codes包含『中國』

,"水果 汽車").

operator

(operator.or)

);在復合查詢時,我們使用must構建了 address必須包含『汽車』或『水果』的查詢條件,但我們也可以給這個must再巢狀乙個布林查詢,這個bool查詢應該是乙個should關係,如下

private boolquerybuilder buildboolquery()

修改must構造即可。

什麼叫全文檢索 全文檢索概念

全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...

什麼叫全文檢索 全文檢索概念

全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...

全文檢索的原理

參考 全文檢索歸結為兩個過程 1 建立索引2 索引搜尋 先關注幾個問題 如何建立索引?索引中存放的是神馬東西?如果通過索引進行搜尋?然後關注幾個重要的概念 反向索引 倒排表 倒排索引 倒排索引檔案 停詞權重 反向索引 儲存這種對映資訊的索引稱為反向索引 solr lucene採用反向索引 就是從關鍵...