lucene索引搜索

什么是Lucene?

Apache LuceneTM是完全用Java编写的高性能,功能齐全的文本搜索引擎库。 它是一项适用于几乎所有需要全文本搜索的应用程序的技术,尤其是跨平台。

Lucene可以纯文本,整数,索引PDF,Office文档。 等等。,

Lucene如何启用“更快的搜索”?

Lucence创建了一个称为倒排索引的东西。 通常我们在文档中映射文档->术语。 但是,Lucene则相反。 创建索引词->包含该词的文档列表,这使搜索速度更快。

安装Lucene

Maven依赖

<pre class='brush:xml'><dependency><groupid>org.apache.lucene</groupid><artifactid>lucene-core</artifactid><version>3.0.2</version><type>jar</type><scope>compile</scope>
</dependency>

下载依赖

从http://lucene.apache.org/下载Lucene,并将lucene-core.jar添加到类路径中

Lucene如何工作?

首先让我们从底部开始了解图片-中心。 原始文本用于创建Lucene“文档”,使用指定的分析器对其进行分析,然后根据字段的Store,TermVector和Analzed属性将文档添加到索引中。

接下来,从上到下搜索。 用户以文本格式指定查询。 查询对象是基于查询文本构建的,执行查询的结果作为TopDocs返回。

核心Lucene类别

目录,FSDirectory,RAMDirectory 包含索引的目录

基于文件系统的索引目录

基于内存的索引目录

目录

indexDirectory = FSDirectory.open(新文件('c:// lucene // nodes'));

索引作家 处理写入索引– addDocument,updateDocument,deleteDocuments,merge等 IndexWriter writer =新的IndexWriter(indexDirectory,

新的StandardAnalyzer(Version.LUCENE_30),

新的MaxFieldLength(1010101));

IndexSearcher 使用indexReader进行搜索-搜索(查询,整型) IndexSearcher searcher =新的IndexSearcher(indexDirectory);
文件 DTO用于索引和搜索 Document document = new Document();
领域 每个文档包含多个字段。 有2部分,名称,值。 新字段('id','1',Store.YES,Index.NOT_ANALYZED)
术语 测试一个字。 用于search.2零件。要搜索的字段和要搜索的值 条款term = new Term('id','1');
询问 所有查询类型的基础-TermQuery,BooleanQuery,PrefixQuery,RangeQuery,WildcardQuery,PhraseQuery等。 查询查询=新的TermQuery(term);
分析仪 从文本构建令牌,并帮助从文本构建索引词 新的StandardAnalyzer()

Lucene目录

目录–是Lucene在其上运行的数据空间。 它可以是文件系统或内存。

以下是常用的目录

目录 描述
FS目录 基于文件系统的目录 目录= FSDirectory.open(文件文件);
//文件->目录路径
RAM目录 基于内存的Lucene目录 目录=新的MemoryDirectory()

Directory = new MemoryDirectory(Directory dir)//将基于文件的目录加载到内存

创建索引条目

Lucene的“文档”对象是索引中使用的主要对象。 文档包含多个字段。 分析器在文档字段上进行工作以将其分解为令牌,然后使用索引编写器写入目录。

索引作家

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true, MaxFieldLength.UNLIMITED);

分析仪

将文本分析为要搜索的标记或关键字的工作。 Lucene提供的默认分析器很少。 分析器的选择定义了如何对索引文本进行标记和搜索。

以下是一些标准分析仪。

示例–分析器如何处理示例文本

定义字段索引的属性

  • 存储–是否应存储该字段以便将来检索
  • 分析–应将内容拆分为令牌
  • TermVECTOR –是否存储基于术语的详细信息


店铺:

该字段是否应存储以便以后撤退

是的 存储值,以后可以从索引中检索
商店编号 不要储存。 与Index.ANALYZED一起使用。 当令牌仅用于搜索时


分析:

如何分析文字

索引分析 将文本分解为标记,对每个标记编制索引以使其可搜索
索引:NOT_ANALYZED 将整个文本作为单个标记编制索引,但不要进行分析(拆分)
Index.ANALYZED_NO_NORMS 与ANALYZED相同,但不存储规范
索引:NOT_ANALYZED_NO_NORMS 与NOT_ANALYZED相同,但没有规范
索引号
使该字段完全可搜索


词向量

相似,突出显示等需要术语详细信息

TermVector.YES 记录
每个文档中的唯一条款+计数+无位置+无偏移
TermVector.WITH_POSITIONS 记录
每个文档中的唯一条款+计数+位置+无偏移
TermVector.WITH_OFFSETS 记录
每个文档中的唯一条款+计数+无位置+抵消
TermVector.WITH_POSITIONS_OFFSETS 记录
每个文档中的唯一条款+计数+位置+偏移
TermVector.NO 不要记录术语向量信息

创建索引的示例

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true,MaxFieldLength.UNLIMITED);Document document = new Document();
document.add(new Field('id', '1', Store.YES, Index.NOT_ANALYZED));
document.add(new Field('name', 'user1', Store.YES, Index.NOT_ANALYZED));
document.add(new Field('age', '20', Store.YES, Index.NOT_ANALYZED));
writer.addDocument(document);

更新索引的示例

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true,MaxFieldLength.UNLIMITED);Document document = new Document();
document.add(new Field("id", "1", Store.YES, Index.NOT_ANALYZED));
document.add(new Field("name", "user1", Store.YES, Index.NOT_ANALYZED));
document.add(new Field("age", "20", Store.YES, Index.NOT_ANALYZED));
writer.addDocument(document);

删除索引的例子

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), MaxFieldLength.UNLIMITED);Term term = new Term('id', '1');
writer.deleteDocuments(term);

搜索索引: 用户以文本格式指定查询。 根据查询文本构建查询对象,对其进行分析,然后将执行的查询结果作为TopDocs返回。
查询是搜索的主要输入。

术语查询
布尔查询 是否(合并多个查询)

前缀查询 以。。开始
通配符查询 ? 和*
– *开头不允许
词组查询 精确短语
范围查询 术语范围或数字范围
模糊查询 相似词搜索

样本查询

搜索示例:

IndexSearcher searcher = new IndexSearcher(indexDirectory);
Term term = new Term('id', '1');
Query query = new TermQuery(term);
TopDocs docs = searcher.search(query, 3);
for (int i = 1; i <= docs.totalHits; i++)
{System.out.println(searcher.doc(i));
}

Lucene诊断工具:

  • 卢克– http://code.google.com/p/luke/
    Luke是一个方便的开发和诊断工具,它可以访问现有的Lucene索引,并允许您以几种方式显示和修改其内容:
  • 豪华轿车– http://limo.sourceforge.net/
    这个想法是要有一个小的工具作为Web应用程序运行,它提供有关Lucene搜索引擎使用的索引的基本信息。

完整的例子:

在这里下载: LuceneTester.java

资源资源

  • http://lucene.apache.org/core/
  • http://www.amazon.com/Lucene-Action-Second-Edition-Covers/dp/1933988177/ref=dp_ob_title_bk

参考: Lucene –在Techie博客的Thoughts中,从我们的JCG合作伙伴 Srividhya Umashanker 快速添加了索引和搜索功能 。

翻译自: https://www.javacodegeeks.com/2012/12/lucene-quickly-add-index-and-search-capability.html

lucene索引搜索

lucene索引搜索_Lucene –快速添加索引和搜索功能相关推荐

  1. Lucene –快速添加索引和搜索功能

    什么是Lucene? Apache LuceneTM是完全用Java编写的高性能,功能齐全的文本搜索引擎库. 它是一项适用于几乎所有需要全文搜索的应用程序的技术,尤其是跨平台的应用程序. Lucene ...

  2. mysql中添加索引的命令_mysql添加索引命令

    1.PRIMARY  KEY(主键索引) mysql>ALTER  TABLE  `table_name`  ADD  PRIMARY  KEY (  `column`  ) 2.UNIQUE( ...

  3. mysql 索引 变慢_mysql添加索引,查询反而变慢

    1.表结构,time1添加普通索引: CREATE TABLE `time_table` ( `time1` INT(11) NULL DEFAULT NULL, `time2` INT(11) NU ...

  4. java 搜索框快速查询_Java项目搜索功能的实现

    今天是刘小爱自学Java的第110天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 事先说明:关于今天的搜索功能实现. 并没有使用到倒排索引这样的主流搜索技术,就一个普通的模糊查询. 在此之前 ...

  5. 使用集集快速添加公众号预约功能

    使用集集可以在几分钟内创建出自己的预约小程序,链接到自己的公众号菜单上,让别人通过点击公众号菜单,在弹出的页面上直接填写信息进行预约,预约信息会自动汇总到集集后台的电子表格,可以进行在线查看或下载,同 ...

  6. 【mysql 索引】mysql 添加索引

    主要内容: 1.什么是索引 2.添加索引sql 3.索引所用的算法 4.补充下概念 5.索引的缺点 6.经典案例 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树 ...

  7. GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘

    摘要:云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战.华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性 ...

  8. mysql添加索引的方法(Navicat可视化加索引和sql语句加索引)

    使用索引的场景: 阿里云日志里出现了慢sql 然后发现publish_works_id字段会经常用于一些关联,所以决定把这个字段加上索引,优化sql 可视化navicat操作字段加索引,选择字段所在的 ...

  9. Navicat mysql 加索引_mysql 索引 (Navicat添加索引)

    索引类型:NORMAL   索引方法:BTREE 一般这样子设置就OK了 一.sql查询语句 SELECT bp.id AS post_id, `bp`.`title`, bp.img AS bbs_ ...

最新文章

  1. SparkSQL和Hadoop(面向数据科学家和大数据分析师)
  2. Oracle中删除数据的一个小技巧
  3. java之java.sql.SQLException: ResultSet is from UPDATE. No Data.
  4. 前端学习(3251):dom的diff算法2
  5. 【kubernetes / k8s 踩坑记录】一定要关闭SWAP
  6. 大厂面试算法系列-如何从无序链表中移除重复项(一)-顺序删除
  7. https的ssl证书申请及服务器的nginx的配置教程
  8. python redis pipeline 堆积_Redis Pipeline python
  9. Mac上的Spotlight搜索都能干什么?
  10. Laravel学习笔记之Demo1——URL生成和存储
  11. Python黑帽子-实现netcat基本功能(改进版)
  12. 基于Python的信用评分卡模型建立和分析,万字阐述,收藏
  13. K均值算法(K_means)
  14. 赚了20亿美元GandCrab勒索病毒家族的故事
  15. 归一化相关系数相关匹配公式
  16. macbook pro(m1) 安装JD-GUI
  17. C#实现简单音乐播放器
  18. 计算机主机mac地址怎么查,怎么查看电脑的Mac地址
  19. java-web6-Servlet知识
  20. [日常笔记] 2: 本地视频播放器 MPV

热门文章

  1. Zookeeper选举原理——FastLeaderElection
  2. Http 持久连接与 HttpClient 连接池
  3. 为什么我强烈建议大家使用枚举来实现单例
  4. 漫画:高并发下的HashMap
  5. Java 线程同步总结
  6. Shell入门(十)之echo
  7. 使用ADO.NET访问数据库
  8. 2015蓝桥杯省赛---java---A---2(星系炸弹)
  9. Ubuntu下C++代码调用可执行文件。
  10. 不安装cudnn可不可以_Linux非root用户如何优雅的安装cuda和cudnn