最近跟着师兄们做个项目,我的任务就是负责做个“全文检索”的小模块。用到了Lucene的索引,下面的是其中的用Lucene实现在索引的一个字段(比如文章内容字段)进行查找多个关键字的实例代码。
1.Lucene说明
Lucene是非常优秀的成熟的开源的免费的纯java语言的全文索引检索工具包。
Lucene的的强项在“建立索引”和”搜索“,而不是实现具体的”分词“。Lucene支持对生成索引的进行”增,删,改,查“操作,这比自己建立的索引有了很大的进步。
可以使用专门的分词程序进行分词,在分词的结果上用Lucene建立索引。
2.用Lucene实现在一个或者多个字段中的检索
主要是函数:MultiFieldQueryParser.parse(String[] query,String[] field,Occur[] occ,Analyzer analyzer);
1)query:要查找的字符串数组
2)field:要查找的字符串数组对应的字段(当然有可以相同的)
3)occ:表示对应字段的限制。有三种:Occur.MUST(必须有), Occur.MUST_NOT(必须没有),Occur.SHOULD(应该)
4)analyzer:对查询数据的分析器,最好与建立索引时用的分析器一致
3.代码示例
下面这个程序可以实现在一个字段“contents”中查找多个关键字。稍加修改也可以在多个字段查找多个关键字。
import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; public class MultiPhraseQuerySearcher { private static String indexPath = "E:\\Lucene\\index"; // 索引保存目录 public static void createIndex(){ // 建立索引 IndexWriter writer; try { writer = new IndexWriter(indexPath,new StandardAnalyzer(),true); Field fieldB1 = new Field("contents","今晚的辩题很道地:在我们这些人当中?",Field.Store.YES,Field.Index.TOKENIZED); Field fieldB2 = new Field("contents","我们为电影《今朝》是一部不错的影片。",Field.Store.YES,Field.Index.TOKENIZED); Field fieldB3 = new Field("contents","我们到底是啥意思呢?",Field.Store.YES,Field.Index.TOKENIZED); Document doc1 = new Document(); Document doc2 = new Document(); Document doc3 = new Document(); doc1.add(fieldB1); doc2.add(fieldB2); doc3.add(fieldB3); writer.addDocument(doc1); writer.addDocument(doc2); writer.addDocument(doc3); writer.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { //contests字段上查找含有"我们","今晚"这两个字段的Doument Query query; IndexSearcher searcher; try { //生成索引 createIndex(); searcher = new IndexSearcher(indexPath); //要查找的字符串数组 String [] stringQuery={"我们","今晚"}; //待查找字符串对应的字段 String[] fields={"contents","contents"}; //Occur.MUST表示对应字段必须有查询值, Occur.MUST_NOT 表示对应字段必须没有查询值 Occur[] occ={Occur.MUST,Occur.MUST}; query=MultiFieldQueryParser.parse(stringQuery,fields,occ,new StandardAnalyzer()); Hits hits = searcher.search(query); for(int i=0;i<hits.length();i++) System.out.println("Document内容为 : "+hits.doc(i)); System.out.println("共检索出符合条件的Document "+hits.length()+" 个。"); } catch (Exception e) {} } }
相关推荐
这是lucene的使用案例,实现了对word文档中的关键字检索,并将检索出的内容高亮打印出来
在Eclipse环境中运用java,Lucene建索引及查询关键字
使用lucene技术,实现android的本地文档资源的全文检索功能,并实现关键字高亮
根据博客调试的程序,比较简单,英文分词和检索,希望对大家学习有帮助。
此资源配合《android+lucene实现全文检索并高亮关键字》使用http://download.csdn.net/detail/reality_jie/6335113
创建索引 一、创建词法分析器 二、创建索引存储目录 三、创建索引写入器 四、将内容存储到索引 关键字查询 一、创建索引存储目录读取器 二、创建索引搜索器 三、解析查询 四、获取结果
lucene3.6.1文件关键字搜索代码(附加核心包),就是一个入门级的JAVA全局文件夹搜索案例、对于初学lucene很有帮助。
用lucene3实现搜索多字段并排序功能(设置权重)
Lucene实现全文检索
java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交...
Lucene 实现的 搜索引擎 例子 ,里面有索引的生成 检查 等等
Lucene多个group by字段实现,字段个数动态。
使用Lucene.net进行全文查找多关键字匹配
本文设计实现了一个中文分词模块,其主要研究目的在于寻找更为有效的中文词汇 处理方法,提高全文检索系统的中文处理能力.整个模块基于当前最流行的搜索引擎架构 Lucene,实现了带有歧义消除功能的正向最大匹配算法...
使用visual studio 开发的lucene.net和盘古分词实现全文检索。并按照lucene的得分算法进行多...有点小bug,在这个字段没有关键字的时候可能会不显示数据, 如果要是只看全文检索,可以自己去掉高亮,看一下检索结果。
在lucene中使用庖丁解牛的分词器,实现类似当当网站的功能实现一个对企业内部产品的检索功能
Lucene实现索引和查询的实例讲解Lucene实现索引和查询的实例讲解
使用compass+lucene实现简单的全文检索功能
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
利用Lucene接口编写简单的信息检索系统,实现对本地目录建立索引和搜索功能。代码包含两个JSP页面,放入tomcat的webapp目录中即可在浏览器中运行程序。选择文档路径时如若涉及浏览器权限问题,可直接输入。