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); }

你可能感兴趣的:(String,null,Lucene,query,import,token)