java lucene實現全文檢索(三)查詢語句

2021-09-10 04:35:15 字數 4323 閱讀 4545

1.termquery 詞項查詢

查詢指定字段包含指定詞項的文件

termquery tq = new termquery(new term("contents", "thinkpad"));

2.booleanquery 布林查詢

組合多個子查詢

occur.should 或

occur.must 且

occur.must_not 且非

occur.filter 同must 但該字句不參與評分、

預設最大字句數為1024 當產生的字句過多丟擲toomanyclauses異常時 可通過booleanquery.setmaxclausecount(int)設定最大字句數

query query1 = new termquery(new term(filedname, "thinkpad"));

query query2 = new termquery(new term("******intro", "英特爾"));

booleanquery.builder booleanquerybuilder = new booleanquery.builder();

booleanquerybuilder.add(query1, occur.should);

booleanquerybuilder.add(query2, occur.must);

booleanquery booleanquery = booleanquerybuilder.build();

3.phrasequery 短語查詢

位移因子決定任意兩個詞項的位置可最大移動多少個位置來進行匹配 預設0

注意:所有加入的詞項都匹配才算匹配,即使是在同乙個位置加入多個詞項。

如果需要在同乙個位置匹配多個同義詞中的乙個,適合用multiphrasequery

phrasequery phrasequery1 = new phrasequery("contents", "thinkpad", "carbon");

phrasequery phrasequery2 = new phrasequery(1, "contents", "thinkpad", "cabon");

phrasequery phrasequery3 = enw phrasequery("contents", "膝上型電腦", "聯想");

phrasequery phrasequery4 = new phrasequery.builder()

.add(new term("contents", "膝上型電腦」), 4)

.add(new term("contents", "聯想"), 5).build();

//等同於

phrasequery phrasequery5 = new phrasequery.builder()

.add(new term("contents", "膝上型電腦"), 0)

.add(new term("contents", "聯想"), 1).build();

// string contents = "thinkpad x1 carbon 20kh0009cd/25cd 超極本輕薄膝上型電腦聯想";

// phrasequery 短語查詢

phrasequery phrasequery2 = new phrasequery(1, "contents", "thinkpad","carbon");

// slop示例

phrasequery phrasequery2slop = new phrasequery(3, "contents", "carbon", "thinkpad");

phrasequery phrasequery3 = new phrasequery("contents", "膝上型電腦", "聯想");

// slop示例

phrasequery phrasequery3slop = new phrasequery(2, "contents", "聯想","膝上型電腦");

4.multiphrasequery 多重短語查詢

支援同位置多個詞的or匹配

term terms = new term[2];

terms[0] = new term("contents", "筆記本");

terms[1] = new term("contents", "膝上型電腦");

term t = new term("contents", "聯想");

multiphrasequery multiphrasequery = new multiphrasequery.builder()

.add(terms).add(t).build();

5.spannearquery 臨近查詢(跨度查詢)

用於更複雜的短語查詢 可以指定詞間位置的最大間隔跨度 可以指定是否按順序排序、slop、gap

spannearquery tq1 = new spantermquery(new term("contents", "thinkpad"));

spannearquery tq2 = new spantermquery(new term("contents", "carbon"));

spannearquery spannearquery = new spannearquery(

new spanquery , 1, true);

spannearquery.builder spannearquerybuilder = spannearquery

.neworderednearquery("contents");

spannearquerybuilder.addclause(tq1).addgap(0).setslop(1)

.addclause(tq2);

spannearquery spannearquery5 = spannearquerybuilder.build();

6.termrangequery 詞項範圍查詢

用於查詢包含某個範圍內的詞項的文件,如以字母開頭a到c的詞項

詞項在反向索引中是排序的, 只需指定的開始詞項、結束詞項, 就可以查詢該範圍的詞項

做數值的範圍查詢用 pointrangequery

termrangequery termrangequery = termrangequery.newstringrange("contents", "carbon", "張三", false, true);

引數:要查詢的字段-field

下邊界詞-lowerterm

上邊界詞-upperterm

是否包含下邊界-includelower

是否包含上邊界-includeupper

7.prefixquery, wildcardquery, regexpquery

注意:這三種查詢可能會比較慢,慎用

prefixquery prefixquery = new prefixquery(new term("contents", "think"));

wildcardquery:萬用字元查詢

*表示0個或多個字元

?表示1個字元

\是轉義符

萬用字元查詢較慢 不要以萬用字元開頭

wildcardquery wildcardquery = new wildcardquery(new term("contents", "think*"));

regexpquery:正規表示式查詢 詞項符合某正規表示式

regexpquery regexpquery = new regexpquery(new term("contents", "厲害."));

8.fuzzyquery模糊查詢

簡單地與索引詞項進行相近匹配 允許最大2個不同字元

常用於拼寫錯誤的容錯,如把「thinkpad"拼成 "thinkd" 仍可搜尋到正確結果

fuzzyquery fuzzyquery = new fuzzyquery(new term("contents", "thind"));

9.數值查詢

前提:查詢的數值字段必須索引

通過intpoint longpoint floatpoint or doublepoint中的方法構建對應的查詢

// 精確值查詢

query exacatquery = intpoint.newexactquery("price", 199900);

// 數值範圍查詢

query pointrangequery = intpoint.newrangequery("price", 499900, 1000000);

// 集合查詢

query setquery = intpoint.newsetquery("price", 1999900, 1000000, 2000000);

java lucene實現全文檢索(四)索引檢索

將輸入的查詢詞拆分後再傳入通過短語查詢進行檢索 param indexpath 索引目錄 param searchstr 拆詞後的字元集合 param limit 查詢條數 throws ioexception public static void indexsearch string indexp...

Django Docker完成es全文檢鎖

使用docker安裝elasticsearch 1.獲取elasticsearch ik映象 從倉庫拉取映象 sudo docker image pull delron elasticsearch ik 2.4.6 1.0 解壓教學資料中本地映象 sudo docker load i elastic...

如何使用SQL Server 2000全文檢索

一 如何在sql中啟用全文檢索功能 1 驗證全文檢索服務是否安裝 通過儲存過程fulltextserviceproperty 返回有關全文服務級別屬性的資訊 來驗證搜尋服務 全文元件 是否安裝。如select fulltextserviceproperty isfulltextinstalled 返...