文档章节

Lucene 总结(1)-小试牛刀

吹比龙
 吹比龙
发布于 2017/08/18 16:40
字数 471
阅读 22
收藏 0

前言

   由于接触的工作对文本语义分析较多,但是实际的应用场景,如果用solr和es感觉就是杀鸡用牛刀,

所以学习lucene,部署运维都方便,可以学习,美滋滋。时间点:2017.8.22 最新版本 6.6.0

pom.xml 如下

        
        <dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-core</artifactId>
			<version>6.6.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-queryparser</artifactId>
			<version>6.6.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-analyzers-common</artifactId>
			<version>6.6.0</version>
		</dependency>

建立索引

Directory  索引存储目录

看下具体的几种实现

 

后面再详细介绍,这里大致知道有这么多实现即可。

Analyzer 分词器,同样有多种实现 ,比如:例子中的标准分词,IK中文分词,CJK二分分词等;

后面具体再介绍

创建索引demo:

         // 指定索引库的地址
         Directory dir= NIOFSDirectory.open(FileSystems.getDefault()
                .getPath("E:/lucene_test"));
         // 创建分词器,标准分词器
         Analyzer analyzer = new StandardAnalyzer();
         IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
         IndexWriter writer = new IndexWriter(dir, iwc);
         writer.deleteAll(); // 清除以前的index
         Document document = new Document();
         Field id = new TextField("id", "1"),
                    Field.Store.YES);
         Field name = new TextField("name", "我是中国人", Field.Store.YES);
         // 将field域设置到Document对象中
         document.add(id);
         document.add(name);
         writer.addDocument(document)
         // 关闭writer
         writer.close();    

通过索引查询

简单查询demo:

            // 注意与创建索引使用相同的分词器    
            Analyzer analyzer = new StandardAnalyzer();
            // 第一个参数:默认搜索的域的名称
            QueryParser parser = new QueryParser("name", analyzer);
            Query query = parser.parse("中国");
            Directory directory = NIOFSDirectory.open(FileSystems.getDefault()
                    .getPath("E:/lucene_test"));
            IndexReader reader = DirectoryReader.open(directory);
            IndexSearcher searcher = new IndexSearcher(reader);
            // 通过searcher来搜索索引库
            // 第二个参数:指定需要显示的顶部记录的N条
            TopDocs topDocs = searcher.search(query, 10);

            // 根据查询条件匹配出的记录总数
            int count = topDocs.totalHits;
            System.out.println("匹配出的记录总数:" + count);
            // 根据查询条件匹配出的记录
            ScoreDoc[] scoreDocs = topDocs.scoreDocs;

            for (ScoreDoc scoreDoc : scoreDocs) {
                // 获取文档的ID
                int docId = scoreDoc.doc;
                // 通过ID获取文档
                Document doc = searcher.doc(docId);
                System.out.println("id:" + doc.get("id"));
                System.out.println("name:" + doc.get("name"));

            }
            // 关闭资源
            reader.close();

 

© 著作权归作者所有

吹比龙
粉丝 10
博文 135
码字总数 38713
作品 0
合肥
程序员
私信 提问
加载中

评论(0)

做大数据分析的怎么可以不会这个?

Overview:0 引言1 环境2 模块准备3 实现思路4 小试牛刀5 中试牛刀6 总结 0 引言 词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文...

上海小胖
2019/04/03
20
0
IOS IPhone 开发需要的开源库[编辑中.. 不断更新]

前言 我是 java & php 程序员,遇到了坑爹的iPhone,被逼无奈在崩溃的边缘下学习object-c ,在学习中遇到了很多 奇葩,无知,龌蹉,呕吐的问题(弱弱的说 : 有的些问题到现在还不知道具体的原...

海参
2013/06/03
2.1K
6
Automake十分钟速成教程

文章目录 AUTOMAKE 小试牛刀 所需文件 使用automake管理单个可执行程序 所需文件 hello–文件夹 hello/Makefile.am hello/configure.ac hello/inc–文件夹 hello/src–文件夹 hello/src/main...

Achou.Wang
04/01
0
0
[性能优化] 7个DEMO教你写Babel Import按需加载

前言 这并不是一篇深入babel的文章,相反这是一篇适合初学babel的demos;本demos不会介绍一大堆babel各种牛逼特性(ps:因为这我也不会,有待深入研究),相反这里提供一大堆demos来解释如何...

DEMOCODING
2019/05/28
0
0
Python又把GUI界面攻下了,今天就告诉你怎么玩

0.引言 学Python这么久了,一直想做个界面出来,最近发现Python有个内置库tkinter,利用它可以很轻松做出一些简易的UI界面,首先来看Python官方对Tkinter的说明: The tkinter package (“T...

上海小胖
2019/03/17
322
0

没有更多内容

加载失败,请刷新页面

加载更多

基于 Roslyn 实现解析引擎

基于 Roslyn 实现一个简单的条件解析引擎 最近在做一个勋章的服务,我们想定义一些勋章的获取条件,满足条件之后就给用户颁发一个勋章,定义条件的时候会定义需要哪些参数,参数的类型,获取...

osc_mfth2zpa
25分钟前
43
0
将字符串中的字母全部转换为大写字母/小写字母

<script> let str = "Hello World!"; // 将字符串的字符全部转换为小写字符 function lowerCase(str) { let arr = str.split(""); let newStr = ""; //......

osc_xsr0bfp3
25分钟前
40
0
Vue 商城的一些小demo(后台添加商品、前台购物车、本地存储的使用)

demo 商城后台,添加一种商品 <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <!-- 引入vue.js --> <script src="js/vue.js......

osc_h8lo50ya
27分钟前
45
0
Git使用教程

Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是...

osc_c9pkd6zt
28分钟前
49
0
文件夹损坏无法打开如何恢复

问题描述: 目录损坏说明这个文件夹内部结构损坏了。文件夹损坏无法打开如何恢复具体恢复方法可以看正文了解(不格式化的恢复方法)。 工具/软件:极限数据恢复软件 步骤1:先百度搜索并下载...

osc_6mbnx553
29分钟前
50
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部