先來熟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採用反向索引 就是從關鍵...