博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全文检索Lucene (1)
阅读量:6808 次
发布时间:2019-06-26

本文共 3914 字,大约阅读时间需要 13 分钟。

Lucene是apache开源的一个全文检索框架,很是出名。今天先来分享一个类似于HelloWorld级别的使用。


工作流程

Lucene工作流程

依赖

我们要想使用Lucene,那就得先引用人家的jar包了。下面列举一下我使用到的jars.

  • lucene-analyzers-common-6.1.0.jar : 分析器支持
  • lucene-core-6.1.0.jar : 全文检索核心支持
  • lucene-highlighter-6.1.0.jar : 检索到的目标词的高亮显示
  • lucene-memory-6.1.0.jar : 索引存储相关的支持
  • lucene-queries-6.1.0.jar : 查询支持
  • lucene-queryparser-6.1.0.jar : 查询器支持

Lucene HelloWorld

下面就着手实现一个级别为HelloWorld的小例子。实现一个基于文章内容的查询。

Article.java

/** * @Date 2016年8月1日 * * @author Administrator */package domain;/** * @author 郭瑞彪 * */public class Article {
private Integer id; private String title; private String content; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } @Override public String toString() { return "Article [id=" + id + ", title=" + title + ", content=" + content + "]"; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; }}

创建索引库

@Test    public void createIndex() throws Exception {        // 模拟一条文章数据        Article a = new Article();        a.setId(1);        a.setTitle("全文检索");        a.setContent("我们主要是做站内搜索(或叫系统内搜索),即对系统内的资源进行搜索");        // 建立索引        Directory dir = FSDirectory.open(Paths.get("./indexDir/"));        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(new StandardAnalyzer());        IndexWriter indexWriter = new IndexWriter(dir, indexWriterConfig);        Document doc = new Document();        doc.add(new StringField("id", a.getId().toString(), Field.Store.YES));        doc.add(new TextField("title", a.getTitle(), Field.Store.YES));        doc.add(new TextField("content", a.getContent(), Field.Store.YES));        indexWriter.addDocument(doc);        indexWriter.close();    }

从索引库中获取查询结果

@Test    public void search() throws Exception {        String queryString = "资源";        Analyzer analyzer = new StandardAnalyzer();        analyzer.setVersion(Version.LUCENE_6_1_0);        QueryParser queryParser = new QueryParser("content", analyzer);        Query query = queryParser.parse(queryString);        // IndexReader indexReader =        // DirectoryReader.open(FSDirectory.open(Paths.get("./indexDir/")));        DirectoryReader directoryReader = DirectoryReader.open(FSDirectory.open(Paths.get("./indexDir/")));        IndexReader indexReader = directoryReader;        IndexSearcher indexSearcher = new IndexSearcher(indexReader);        TopDocs topDocs = indexSearcher.search(query, 10);        ScoreDoc[] scoreDocs = topDocs.scoreDocs;        List
articles = new ArrayList
(); for (int i = 0; i < scoreDocs.length; i++) {
ScoreDoc scoreDoc = scoreDocs[i]; Document doc = indexSearcher.doc(scoreDoc.doc); Article a = new Article(); a.setId(Integer.parseInt(doc.get("id"))); a.setTitle(doc.get("title")); a.setContent(doc.get("content")); System.out.println(a.toString()); articles.add(a); } // 显示结果 System.out.println("总的记录数为: " + topDocs.totalHits); System.out.println(articles.toString()); for (Article a : articles) { System.out.println("-----------搜索结果如下-----------------"); System.out.println(">>>id: " + a.getId()); System.out.println(">>>title:" + a.getTitle()); System.out.println(">>>content:" + a.getContent()); } indexReader.close(); analyzer.close(); }

查询结果

总的记录数为: 4-----------搜索结果如下----------------->>>id: 1>>>title:全文检索>>>content:我们主要是做站内搜索(或叫系统内搜索),即对系统内的资源进行搜索-----------搜索结果如下----------------->>>id: 2>>>title:全文检索2>>>content:我们主要是做站内搜索(或叫系统内搜索),即对系统内的资源进行搜索,hahahahahhaha

总结

Lucene全文检索的功能可以这么简单的实现,但是里面有更多的用法等着我们去挖掘。

你可能感兴趣的文章
【职场攻略】比你的工资更重要的十件事
查看>>
Linux 常用命令学习-文件及文件夹操作相关命令-持续更新
查看>>
OSI参考模型与排错
查看>>
Spark Streaming原理简析
查看>>
TCP协议的三次握手+四次断开
查看>>
Selenium2.41.0—获取动态资源 (转)
查看>>
Confluence 6 配置数字格式
查看>>
深入BUG分析
查看>>
销售灵魂人物的潜伏笔记5
查看>>
SQL代码自动生成器
查看>>
向左还是往右?Chris Dixon谈何时放弃你的idea
查看>>
OC 计算幂集 - 递归法
查看>>
xstream使用的第二个小问题
查看>>
只会编程的程序员没有前途
查看>>
Litespeed如何安装phpmyadmin/pureftpd
查看>>
四层和七层负载均衡的区别
查看>>
Nginx+Tomcat关于Session的管理
查看>>
我的友情链接
查看>>
Linux Vue环境搭建
查看>>
String、StringBuffer和StringBuilder
查看>>