lucene索引搜索_Lucene –快速添加索引和搜索功能

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返回。
查询是搜索的主要输入。

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

机器生成的替代文本:表36布尔查询运算符的快捷方式详细语法快捷语法aANDb + a + b aORb ab aNDNOTb + a-b

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

样本查询

搜索示例:

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索引搜索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从graphql endpoint获取schema文件

graphql server端有更新&#xff0c;client端需要重新获取schema文件用于创建新的api request&#xff0c;下面简要记录如何从graphql endpoint获取schema文件 You can simply install the CLI using npm or yarn by running the following command. This will add the graphql…

pythonclass全局变量_python的局部变量,全局变量,类变量,实例变量

定义&#xff1a; a、全局变量&#xff1a;在模块内、在所有函数外面、在class外面&#xff0c;这就是全局变量。 b、局部变量&#xff1a;在函数内、在class的方法内&#xff08;未加self修饰的&#xff09;&#xff0c;这就是局部变量。 c、 静态变量&#xff1a;在class内的…

使用JUnit 5测试异常

JUnit 5带来了令人敬畏的改进&#xff0c;它与以前的版本有很大的不同。 JUnit 5在运行时需要Java 8&#xff0c;因此Lambda表达式可以在测试中使用&#xff0c;尤其是在断言中。 这些断言之一非常适合测试异常。 设置项目 为了演示JUnit 5的用法&#xff0c;我使用了我的长期…

pytorch list转tensor_点赞收藏:PyTorch常用代码段整理合集

机器之心转载来源&#xff1a;知乎作者&#xff1a;张皓众所周知&#xff0c;程序猿在写代码时通常会在网上搜索大量资料&#xff0c;其中大部分是代码段。然而&#xff0c;这项工作常常令人心累身疲&#xff0c;耗费大量时间。所以&#xff0c;今天小编转载了知乎上的一篇文章…

csp-s模拟测试42「世界线·时间机器·密码」

$t3$不会 世界线 题解 题目让求的就是每个点能到点的数量$-$出度 设每个点能到的点为$f[x]$ 则$f[x]x \sum\limits_{y}^{y\in son[x]} U f[y]$ 用$bitset$优化一下即可,但单纯这样会炸内存,随意$yy$一下,时间换空间,像平衡树一样开个垃圾桶都行 代码 #include<bits/stdc.h&g…

python中的命名空间_深入理解Python中的命名空间和范围

Python中的命名空间和范围 在Python中&#xff0c;每个包、模块、类、函数和方法函数都拥有一个“名称空间”&#xff0c;其中解析了变量名称。下面本篇文章就来带大家认识一下Python中的命名空间和范围&#xff0c;希望对大家有所帮助。什么是命名空间&#xff1a; 命名空间是…

ubuntu16.04安装MATLAB R2017b步骤详解(附完整破解文件包)

https://blog.csdn.net/qq_32892383/article/details/79670871 转载于:https://www.cnblogs.com/BambooEatPanda/p/11523727.html

lisp将图元追加选择_汕尾幸运儿喜爱大乐透 两次买彩票就擒获8注追加二等奖254万元...

6月26日&#xff0c;中国体育彩票大乐透第19073期开奖&#xff0c;前区开出号码04﹑11﹑19﹑20﹑24&#xff0c;后区开出号码08﹑11。当期送出头奖2注&#xff0c;二等奖176注&#xff0c;其中汕尾一位幸运儿陈先生(化名)擒得追加二等奖8注&#xff0c;喜获奖金2541434元。两次…

什么是JAX-RS注释? (第3部分)

JAX-RS注释概述&#xff08;第3部分&#xff09; 这是一个由三部分组成的系列&#xff0c;介绍了用于实现REST端点的注释。 在JAX-RS批注的第二部分中&#xff0c;您了解了&#xff1a; Path注释和PathParam QueryParamter批注 Produces批注 Consumes批注 在这一部分中&a…

csp-c模拟测试43「A·B·C」

B 题解 $f[i][(gcd(prime[j]*prime[k]\%P,P))]\sum\limits_{k1}^{k<num} f[i-1][k]*phi(\frac{P}{prime[j]})$ 关于$phi(\frac{P}{prime[j]})$理解 $phi(\frac{P}{prime[j]})$是求$prime[j]$代表的数的个数 $Pk_0*prime[j]$ $x_1k_1*prime[j]$ $x_2k_2*prime[j]$ ....... 要…

小甲鱼python全部视频_小甲鱼全套教程之Python系列视频教程

Python 当前位置&#xff1a;主页 > 编程教程 > Python > 小甲鱼全套教程之Python系列视频教程 小甲鱼全套教程之Python系列视频教程 教程大小&#xff1a; 发布时间&#xff1a;2015-04-18   下载次数&#xff1a;次 本套小甲鱼全套教程之Python系列视频教程是比较…

如何有效开展小组教学_高效课堂 有效教学 | 教育部专家到徐州市第三中学开展教研活动...

原标题&#xff1a;高效课堂 有效教学 | 教育部专家到徐州市第三中学开展教研活动前言2020年12月1日&#xff0c;教育部基础教育课程教材发展中心徐州调研暨徐州市2020年高中语文教师“深度学习”研讨活动、徐州市2020年高中化学骨干教师“三新”培训在徐州市第三中学举办。参加…

技术管理角色认知-管理都需要做哪些事

背景 即管理的具体形式&#xff0c;关于what的问题&#xff1f;管理到底要做哪些事情&#xff1f; 派别定义说明过程管理是5个要素组成的一种普遍的人类活动&#xff0c;这5个要素是&#xff1a;计划&#xff0c;组织&#xff0c;指挥&#xff0c;协调&#xff0c;控制亨利法约…

带哨兵节点的链_HBA公链 | IPFS:区块链“不可能三角”的可能解

你知道区块链中的“不可能三角”吗&#xff1f;即区块链无法同时达到可扩展性&#xff08;Scalability&#xff09;、去中心化&#xff08;Decentralization&#xff09;和安全&#xff08;Security&#xff09;。这三个要素中只能同时兼顾两个&#xff0c;比如&#xff0c;要想…

python实现微信小程序的接口自动化_appium+python自动化56-微信小程序自动化(摩拜为例)...

前言 最近微信的小程序越来越多了&#xff0c;随之带来的问题是&#xff1a;小程序如何做自动化测试&#xff1f; 本篇以摩拜小程序为例&#xff0c;介绍如何定位小程序里面的元素 运行环境&#xff1a; android 7.0 appium v1.7.1 webview进程 1.小程序和微信公众号还不太一样…

swingworker_使用SwingWorker的Java Swing中的多线程

swingworker如果要使用Swing用J​​ava编写桌面或Java Web Start程序&#xff0c;您可能会觉得需要通过创建自己的线程在后台运行某些程序。 没有什么可以阻止您在Swing中使用标准的多线程技术&#xff0c;并且需要遵循通常的注意事项。 如果有多个线程访问相同的变量&#xf…

指定端口传输_一段话告诉你什么是端口

1、端口的含义端口是指接口电路中的一些寄存器&#xff0c;这些寄存器分别用来存放数据信息、控制信息和状态信息&#xff0c;相应的端口分别称为数据端口、控制端口和状态端口。电脑运行的系统程序&#xff0c;其实就像一个闭合的圆圈&#xff0c;但是电脑是为人服务的&#x…

loop在python中什么意思_python中迭代什么意思

1、迭代&#xff1a; 迭代是通过重复执行的代码处理相似的数据集的过程&#xff0c;并且本次迭代的处理数据要依赖上一次的结果继续往下做&#xff0c;上一次产生的结果为下一次产生结果的初始状态&#xff0c;如果中途有任何停顿&#xff0c;都不能算是迭代。例如&#xff1a;…

使用Spring Data的Apache Ignite

Spring Data提供了一种统一而简单的方法来访问不同类型的持久性存储&#xff0c;关系数据库系统和NoSQL数据存储。 它位于JPA之上&#xff0c;添加了另一层抽象并定义了基于标准的设计以在Spring上下文中支持持久层。 Apache Ignite IgniteRepository实现了Spring Data CrudR…

js hover图片放大不遮挡_CSS3+JS 实现放大镜

注意&#xff1a;看懂本文需要&#xff1a;懂中文 &#xff1a;)学习过 JavaScript 和 css代码较长&#xff0c;框框可左右滑动哦您的观看和点赞是对本公众号最大力的支持 ~~原文链接&#xff1a;https://blog.csdn.net/qq_43624878/article/details/110197749 CSS3JS完美实现放…