lucene

全文检索引擎 Lucene.net

≯℡__Kan透↙ 提交于 2020-04-04 06:34:02
全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。 Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。开发人员可以基于Lucene.net实现全文检索的功能。 Lucene.net是Apache软件基金会赞助的开源项目,基于Apache License协议。 Lucene.net并不是一个爬行搜索引擎,也不会自动地索引内容。我们得先将要索引的文档中的文本抽取出来,然后再将其加到Lucene.net索引中。标准的步骤是先初始化一个Analyzer、打开一个IndexWriter、然后再将文档一个接一个地加进去。一旦完成这些步骤,索引就可以在关闭前得到优化,同时所做的改变也会生效。这个过程可能比开发者习惯的方式更加手工化一些,但却在数据的索引上给予你更多的灵活性,而且其效率也很高。 来源: https://www.cnblogs.com/suizhikuo/p/3690794.html

Elasticsearch的Refresh与Flush操作

只谈情不闲聊 提交于 2020-04-02 14:21:53
初次接触到这两个概念,估计都会觉得他们没什么差别,都是为了在操作索引之后让索引可以被实时性的搜索,不过它们还是有点不同的。 Elasticsearch底层依赖Lucene,这里我们介绍下Lucene的segment, Reopen,commit。 Segment 在ES中,基本的存储单元是shard(分片),但是在更底层的Lucene上稍微有点不同,ES的每一个shard是Lucene的一个index(索引),Lucene的索引由多个segment组成,每个segment就是ES文档的倒序索引,里面包含了一些term(词)的mapping(映射)。 当每个ES的文档创建的时候,都会写入一个新的segment中,因此每次写入的都是新的segment,所以不需要修改之前的segment。在删除文档的时候,只是在它属于的segment哪里标记为已删除就可,没有真正的从磁盘中抹除。更新也是同样的,只是在对应之前segment哪里标记为逻辑删除,然后新建一个新的segment。 Lucene Reopen Reopen是为了让数据可以可以被搜索到,尽管这个时候数据可以被搜索到,但是不一定保证数据已经被持久化到磁盘中。 Lucene Commit Commit就是为了让数据持久化,每一次的Commit,不同segment的数据都会被持久化到磁盘中,虽然这样可以让数据更安全

Lucene配置步骤详解

白昼怎懂夜的黑 提交于 2020-04-02 06:26:20
Lucene配置步骤说明:   1.搭建环境;   2.创建索引库;   3搜索索引库。 Lucene配置步骤:    第一部分:搭建环境(创建环境导入jar包)     前提:已经创建好了数据库(直接导入book.sql文件)       第一步:下载Lucene:         Lucene是全文检索功能的工具包,使用时从官方网站下载,并解压         下载版本:4.10.3(要求:jdk1.7以上)       第二步:创建项目导入包,项目结构如下:       第二部分:创建索引         步骤说明:           1.采集数据           2.将数据转换成Lucene文档           3.将文档写入索引库,创建索引        第一步:采集数据           Lucene全文检索不是直接查询数据库,所以需要先将数据采集出来           1.创建Book类         2.创建一个BookDao类         3.创建一个测试类BookDaoTest         4.测试结果,采集数据成功     第二步:将数据转换成Lecene文档         Lucene是使用文档类型来封装数据的,所以需要先将采集的数据转换成文档类型。其格式为:       修改book类,新增一个方法转换数据         第三步

Elasticsearch浅析

两盒软妹~` 提交于 2020-03-28 01:18:17
目录 Elasticsearch简介 基本概念 Elasticsearch特点 Elasticsearch节点类型 Elasticsearch集群状态 Elasticsearch集群选举 Elasticsearch写操作 Elasticsearch更新和删除操作 Elasticsearch读操作 Elasticsearch故障转移 Elasticsearch优化点 问题 Elasticsearch主要特性 参考文档 Elasticsearch简介 Elasticsearch是一个近实时的分布式搜索分析引擎,常被用作全文搜索,结构化搜索,分析等。它使用 Java 编写的且开源,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单,通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。 Lucene 是一个基于Java的全文信息检索工具库,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是Apache Jakarta家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具库。 然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容: 一个分布式的实时文档存储,每个字段可以被索引与搜索 一个分布式近实时分析搜索引擎

Lucene.net常用功能说明

自古美人都是妖i 提交于 2020-03-25 12:03:27
Lucene.net是一个.net下的全文检索类库。配置简单,功能丰富,比较成熟。我在项目中用Lucene.net有一段时间了,这里我把常用一些功能写出来,与大家一起分享。 Lucene.net用的是3.0版本,分词采用盘古分词。示例程序用VS2010进行编译。 1 索引 在做索引时,有些参数是需要配置的,下面介绍下常用的参数配置。 1) 数据类型,如整形、时间、字符。 每种类型生成的索引方式都是不同的。比如:字符串需要分词,整形数据则不需要。生成索引的方式会影响到检索,如果整形按照字符串的方式生成索引,则比较不容易实现区域检索:如,ID>1000 and ID<2000。 时间索引比较特殊一些。Lucene.net无法对时间字段进行排序和区域检索,所以,要把时间字段转成长整形来实现。时间索引参考如下代码: var time = DateTime.Now; var timeField = new NumericField("Publish", Field.Store.YES, true).SetLongValue(time.Ticks); 2) 是否存储元数据。 如果进行存储,Lucene则会把索引数据与元数据同时进行存储。 好处:取数据比较容易。 坏处:索引比较大,可能会影响检索的速度 3) 是否进行排序 Lucene.net是支持排序的,包括整形排序、时间排序、字符串排序。

Lucene 初识

柔情痞子 提交于 2020-03-24 14:20:45
因为业务需要,虽然自己不是专门写搜索的,但是需要自己拼一些搜索条件去调用搜索的接口,而之前看的JVM crash里也涉及到了Lucene,所以大概了解一下。 参考文档: http://www.iteye.com/topic/839504 http://www.cnblogs.com/xing901022/p/3933675.html 一、Lucene简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 HTML 文档,PDF 文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene 进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使 Lucene 能够几乎适用于所有的搜索应用程序。

关于Lucene以及索引和搜索的流程

不想你离开。 提交于 2020-03-23 06:12:16
   Lucene的普及和成功的背后是因为它的简单。   因此,你不需要深入理解Lucene的信息索引和检索工作方面的知识就可以开始使用。   Lucene提供了简单但是强大的核心API去实现全文索引和检索,你只需要掌握少数的类就能将Lucene整合到应用中。   刚接触Lucene的人可能会误认为Lucene是一个文件搜索工具、网络爬虫、或者网页搜索引擎。实际上Lucene是一个软件库,而不是一个全功能的搜索应用程序。它涉及全文索引和搜索,而且做得非常好。Lucene可以让你的应用程序隐藏起复杂的索引和搜索背后的操作,而使用简单的API处理特定的问题领域和业务规则。你可以想象Lucene就是像一个层,你的应用就在层的上面。   Lucene允许你添加索引和搜索功能到应用程序中。Lucene不关心数据的来源,Lucene可以索引和搜索任何可以转换成文本格式的数据。这意味着你可以用Lucene索引和搜索数据:远程web服务器上的网页、存储在本地文件系统的文档、简单的文本文件、Microsoft Word文档、HTML或PDF文件,或者其他任何可以从中提取文本信息的格式文件。   所有搜索引擎的核心就是索引的概念:把原始数据处理成一个高效的交叉引用查找,以便快速检索。让我们看看快速高效的索引和搜索过程。    1.索引是什么,为什么它这么重要?    假如你需要搜索大量的文件

Escaping slash in elasticsearch

别来无恙 提交于 2020-03-23 04:26:37
问题 I run a photography website. Photographers put their "by_line" as "Some name/ourwebsite.com". I have a DSL i'm using for most of my queries, stringing together "filter" queries using "terms" which works great for 90% of cases, however in this case i'm getting zero results back with a query like this (notice how i tried to escape the forward slash): body: {query: {filtered: {filter: {and: [{term: {is_visible: true}}, {term: {"event.by_line": "john\\/my_website.com"}}] } } } } I'm using

Lucene Field域类型

余生颓废 提交于 2020-03-22 18:28:14
Field 属性:   Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。     是否分词 (tokenized)       是:作分词处理,即将Field值进行分词,分词的目的是为了索引。         比如:商品名称、商品描述等,这些内容用户要输入关键字搜索,由于搜索的内容格式大、内容多需要分词后将语汇单元建立索引       否:不作分词处理         比如:商品id、订单号、身份证号等     是否索引 (indexed)       是:进行索引。将Field分词后的词或整个Field值进行索引,存储到索引域,索引的目的是为了搜索。         比如:商品名称、商品描述分析后进行索引,订单号、身份证号不用分词但也要索引,这些将来都要作为查询条件。       否:不索引。         比如:图片路径、文件路径等,不用作为查询条件的不用索引。     是否存储 (stored)       是:将Field值存储在文档域中,存储在文档域中的Field才可以从Document中获取。         比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。       否:不存储Field值    

Lucene入门

最后都变了- 提交于 2020-03-22 18:15:28
Lucene快速入门:   搭建环境     1.创建工程,引入坐标(springboot工程) <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <skipTests>true</skipTests> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2