Lucene 搜索词分词
搜索詞分詞也即對用戶輸入的搜索詞進行分詞處理,如“民族 信仰”。如果不對它進行分詞,可能搜索不到東西,但單獨搜索“民族”或“信仰”抑或“民族信仰”都可以搜到東西,故要對其進行分詞。
?
兩種方法:
(1)空格分詞,字符串處理
單個詞項搜索的代碼:
//搜索 text 字段 原來的語句 //Term t = new Term("text", phrase); //生成Query對象 //Query q = new TermQuery(t);
修改后的,空格隔開的多個詞項的搜索
BooleanQuery q = new BooleanQuery(); String str[] = phrase.split(" "); for(int i=0; i<str.length ;i++){ q.add(new TermQuery(new Term("text",str[i])),BooleanClause.Occur.MUST); }
?
(2)利用IK等中文分詞組件
使用和建索引時一樣的分詞器,會取得最佳的搜索效果
首先引入分詞器相關的類
import org.mira.lucene.analysis.IK_CAnalyzer; //分詞器,對搜索詞分詞
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Token;
主要代碼:
// 分詞組件 BooleanQuery q = new BooleanQuery(); StringReader sr = new StringReader(phrase); IK_CAnalyzer ik = new IK_CAnalyzer(); TokenStream ts = ik.tokenStream("*",sr); Token t = null; while((t=ts.next())!=null){q.add(new TermQuery(new Term("text",t.termText())),BooleanClause.Occur.MUST); }
總結
以上是生活随笔為你收集整理的Lucene 搜索词分词的全部內容,希望文章能夠幫你解決所遇到的問題。