中文檢索 分詞 同義詞 權重

2021-07-05 04:02:34 字數 2147 閱讀 6702

1、首先匯入lucene相關包:

lucene-analyzers-common-4.7.1.jar

lucene-core-4.7.1.jar

lucene-facet-4.7.1.jar

lucene-highlighter-4.7.1.jar

lucene-queries-4.7.1.jar

lucene-queryparser-4.7.1.jar

2、然後把分詞原始碼ik

複製到專案的src資料夾下。ik是中文分詞開源**之一,lucene預設的分詞器只能對英文分詞,ik在此基礎上做了些工作使得可以對中文分詞。

如圖:

3、在此基礎上可以進行相應的開發:

(1) 可以根據需要新增自己的擴充套件詞典(分詞詞典),修改ikanalyzer.xml檔案即可。

(2)可以根據需要使用業務詞典,業務詞典的詞帶有權重,以特定的格式,如"="或空格。

(3)為同義詞建立同義詞索引,同義詞最好寫到乙個同義詞詞典裡,方便以後重建索引使用。

初步實現的原始碼可見:網盤/學習/**例項/lucene中文檢索/lucenetest

說明:

1、ik提供了中文分詞,而

lucene預設的分詞器不支援中文,所以在建立索引的時候要用到ik分詞器

2、檢索的時候可以使用ik提供的檢索功能,也可以用lucene提供的檢索功能

ik原始碼提供的多字段檢索或單字段檢索可以直接檢索句子,因為它檢索的時候會再一次呼叫分詞器,把句子分詞,然後對

每個分詞再檢索。

lucene提供的檢索只能對分詞檢索,也就是說如果你把乙個句子當做引數去檢索,lucene會把整個句子當做乙個詞,這

肯定搜尋不到答案。所以在檢索之前要對句子做一次分詞(要用ik提供的分詞器)

當不需要對每個分詞的權重設定,也不需要用到同義詞,而且多條件搜尋不複雜,可以直接使用ik原始碼提供的搜尋功能。如果希望加入同義詞或對分詞設定權重,不同欄位的搜尋之間的與或關係不同,這是就要用lucene提供的搜尋功能。首先利用ik提供的分詞功能把句子分詞,再取得同義詞,然後利用booleanquery來把各部分搜尋合併起來:

directory directory = fsdirectory.open(new file("d:\\lucene\\index"));

indexreader ireader = ireader = directoryreader.open(directory);

indexsearcher isearcher = new indexsearcher(ireader); 

booleanquery booleanquery=

newbooleanquery();

termquery query = 

null

;for

(string s:list)

topdocs topdocs = isearcher.search(booleanquery ,20);

其中list是句子的分詞結果列表,欄位1和字段2之間是與關係,也就是兩字段都要含有關鍵字s,而每個關鍵字之間是或關係,即只要含有其中乙個關鍵字就可以

如果只要搜尋乙個字段,則**更簡單:

for(string s:list)

可以根據需要修改它們之間的關係,通過設定

must

或 should

,如某兩個欄位是與關係,其它欄位是或關係,某些分詞是與關係,其它分詞是或關係等等

分詞過程:

listlist = 

newarraylist();

analyzer analyzer = 

newikanalyzer();

//獲取

lucene

的tokenstream

物件tokenstream ts = 

null

;try

//關閉

tokenstream

(關閉stringreader

)ts.end();

} catch

(ioexception e)  

finally

catch

(ioexception e) }

}

倒排索引 分詞 同義詞

es的倒排索引 文字分析 analysis 就是把全文轉換成一系列詞條 term token 的過程 也叫分詞 文字分析是通過分詞器 analyzer 實現的。分詞器有兩個作用 es內建了多種分詞器 put 指定分詞器 說明 已經存在的索引執行上述操作會報錯。可以在建立索引時指定。standard分...

常見同義詞

目錄originate from derive from stem from spring from giant n.故事中常為殘酷而愚蠢的 巨人 巨人 巨獸 巨型植物 大公司 強大的組織 adj.巨大的 特大的 偉大的 vast adj.遼闊的 巨大的 龐大的 大量的 tremendous adj...

同義詞(別名)

同義詞 別名 注意 如果檢視其他使用者的表,報錯表或檢視不存在 可能是許可權不足 需要授權 conn as sysdba grant select on hr.employees to scott conn scott tiger select count from hr.employees con...