全文检索

Lucene(全文检索)

落爺英雄遲暮 提交于 2020-02-08 03:10:37
Lucene 数据分类 非结构化数据查询方法 Lucene实现全文检索 分析器的使用 查询索引 索引库的维护 数据分类 结构化数据:指具有固定格式或有限长度的数据(例如数据库,元数据等) 非结构化数据:指不定长或无固定格式的数据(例如邮件,word文档等) 非结构化数据查询方法 顺序扫描法 从头到尾进行扫描,找到匹配的文件 全文检索 先建立索引,然后对索引进行搜索 Lucene实现全文检索 索引和搜索流程图 创建索引 获得原始文档 创建文档对象 我们可以将磁盘上的一个文件当成一个document,Document中包括一些Field(file_name文件名称、file_path文件路径、file_size文件大小、file_content文件内容) 分析文档 将原始内容创建为包含域(Field)的文档(document),需要再对域中的内容进行分析,分析的过程是经过对原始文档提取单词、将字母转为小写、去除标点符号、去除停用词等过程生成最终的语汇单元,可以将语汇单元理解为一个一个的单词。 创建索引( 倒排索引结构 ) 对所有文档分析得出的语汇单元进行索引,索引的目的是为了搜索,最终要实现只搜索被索引的语汇单元从而找到Document(文档) 创建索引代码 分析器的使用 Lucene 自带分词器 StandardAnalyzer:单字分词 SmartChineseAnalyzer

lucene&solr全文检索_4改进

╄→гoц情女王★ 提交于 2020-02-01 22:27:32
在之前的程序中我们发现分词不太准确,因此我们可以使用支持中文分词。   分析器的执行过程:      从一个reader字符流开始,创建一个基于reader的tokenizer分词器,经过三个tokenfilter(第一个大写变小写,第二个用回车替换空格,去掉不需要的a,the,and,逗号等)生成tokens。要看分析器的分析效果只需要看tokenstream中的内容就可以了,每个分析器都有一个方法tokenstream,返回一个tokenstream对象。   lucene自带中文分析器: standardAnalyzer:单字分词即一个一个分 CJKAnalyzer:二分法,即两个一分,、 SmartChineseAnalyzer:对中文支持好,但扩展性差,对词库的操作不是很好处理。 由此可见上面三个分析器效果并不是很理想,因此要使用第三方分析器: paoding: 庖丁解牛最新版在 https://code.google.com/p/paoding/ 中最多支持 Lucene 3.0,且最新提交的代码在 2008-06-03,在svn中最新也是2010年提交,已经过时。 mmseg4j:最新版已从 https://code.google.com/p/mmseg4j/ 移至 https://github.com/chenlb/mmseg4j-solr ,支持 Lucene 4

lucene&solr全文检索_3查询索引

ぃ、小莉子 提交于 2020-02-01 20:46:05
创建完索引之后,我们需要查询。 百度的查询接口及结果如图所示: 具体步骤已经在上个博客中写到,直接上代码:(由于是一个完整的程序,我把创建索引的代码也post上) package come.me.lucene; import static org.junit.jupiter.api.Assertions.*; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.LongField; import org.apache.lucene.document.StoredField; import org.apache.lucene.document.TextField; import

Lucene简介和使用

筅森魡賤 提交于 2020-01-26 02:59:15
全文检索 数据分类: 结构化数据:格式、长度、类型等固定,如数据库中的数据 非结构化数据:格式、长度、类型等不固定,如pdf、html文件 数据查询: 结构化数据:sql语句 非结构化数据:将非结构化数据转换为结构化数据,建立索引然后查询 全文检索就是先创建索引然后查询索引的过程 全文检索的应用场景 : 搜索引擎,如百度、谷歌 站内搜索,如微博、csdn文章 电商搜索,如淘宝、京东 等等 Lucene简介 Lucene是一个基于Java开发的开源全文检索引擎工具包,但它 不是一个完整的全文检索引擎,而是一个全文检索引擎的架构 ,提供了完整的查询引擎和索引引擎,部分文本分析引擎。 Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。 Lucene实现全文检索流程 上面说到 全文检索就是先创建索引然后查询索引的过程 ,Lucene实现全文检索就是需要创建索引和查询索引。 使用Lucene 创建索引 需要的jar包: commons-io-2.6.jar junit-4.10.jar lucene-analyzers-common-7.4.0.jar lucene-core-7.4.0.jar 测试用的原始文档D:\java

Sphinx + Coreseek 实现中文分词搜索

自古美人都是妖i 提交于 2020-01-25 16:51:25
Sphinx + Coreseek 实现中文分词搜索 Sphinx Coreseek 实现中文分词搜索 全文检索 1 全文检索 vs 数据库 2 中文检索 vs 汉化检索 3 自建全文搜索与使用Google等第三方站点提供的站内全文搜索的差别 Sphinx Coreseek介绍 Coreseek安装使用 1. 全文检索 1.1 全文检索 vs. 数据库 全文检索是数据库的有力补充,全文检索并不能替代数据库在应用系统中的作用。当应用系统的数据以大量的文本信息为主时,採用全文检索技术能够极大的提升应用系统的价值。 数据库搜索。假设搜索范围包含所有正文数据。往往性能非常低。用户响应时间长(分钟级。常常超时);而全文检索能够在0.x秒(毫秒级)的时间内将结果反馈给用户; 数据库搜索。一个用户在搜索。往往影响其它用户的相应用系统进行操作。全文检索能够同一时候支持多个用户并发搜索,其它相应用系统进行操作的用户不受影响。 数据库搜索非常难实现多个关键字的复合搜索。而全文检索能够实现多个关键词的复合搜索。包含 “和(AND)”、“或(OR)”、“否(NOT)” 等; 数据库搜索难于对结果进行相关度排序,当检索结果多时。用户往往难于找到最恰当的文档。而全文检索通过统计的研究成果。能够将文档进行相关度排序后。再返回给用户,提高用户的效率; 全文检索还能够对检索结果的数据进行聚类分析(Group,

第五章-索引与算法

别等时光非礼了梦想. 提交于 2020-01-18 02:17:31
5.1 InnoDB存储引擎索引概述 183 InnoDB存储引擎支持以下几种常见的索引: B+树索引 全文索引 哈希索引 InnoDB 存储引擎支持的哈希索引是自适应的,InnoDB 存储引擎会根据表的使用情况自动为表生成哈希索引,不能人为干预是否在一张表中生成哈希索引。 B+树索引目前关系型数据库系统中查找最为常用和最为有效的索引。 B+树索引并不能找到一个给定键值的具体行,只能找到对应的页,然后把页读到内存,再在内存中进行查找。 5.2 数据结构与算法 184 5.2.1 二分查找法 184 5.2.2 二叉查找树和平衡二叉树 185 5.3 B+树 187 5.3.1 B+树的插入操作 187 5.3.2 B+树的删除操作 190 5.4 B+树索引 191 根据叶子节点存放的是否是一整行的信息,可将数据库中的B+树索引分为聚集索引(clustered inex)和辅助索引(非聚集索引)(secondary index) 5.4.1 聚集索引 192 聚集索引(clustered index)就是按照每张表的主键构造一棵 B+树,同时叶子节点中存放的即为表的行记录数据(所有叶子节点加起来就是整张表的行记录数据),也将聚集索引的叶子节点称为数据页。 聚集索引的存储并不是物理上连续的,而是逻辑上连续的。 5.4.2 辅助索引 196 对于辅助索引(Secondary Index

ElasticSearch 全文检索— ElasticSearch 基本操作

北战南征 提交于 2019-12-31 04:21:02
REST 简介-定义   REST (REpresentation State Transfer)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。   Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。   在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个惟一的地址。所有资源都共享统一的界面,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。 REST 简介-资源 REST 简介-基本操作   1)GET 获取对象的当前状态   2)PUT 改变对象的状态   3)POST

SqlServer 2005 简单的全文检索

时间秒杀一切 提交于 2019-12-27 21:45:53
简单的全文检索创建,直接贴刚测试的代码,注释写的很清楚: --查看当前数据库状态 1为已经启用了全文索引 SELECT DATABASEPROPERTY ('数据库名','IsFulltextEnabled') --打开FullText功能 execute sp_fulltext_databse 'enable' --关闭此功能 execute sp_fulltext_databse 'disable' --创建全文索引目录 --删除全文目录 DROP FULLTEXT 目录名 CREATE FULLTEXT CATALOG 目录名 -- 每个表只可以有一个全文索引,存放在指定的索引目录里,可以通过向导创建,也可以通过SQL创建 -- indexname是指已存在的基于指定表的唯一索引名.而不是唯一索引列名.如果索引不存在,需要先创建唯一索引. --删除全文索引 DROP FULLTEXT INDEX ON 表名 CREATE FULLTEXT INDEX ON 名称 (索引1,索引2...) KEY INDEX indexname ON 表名 --全文索引查询 Select * from 表名 where contains( 列名, ' "202*" or "2*" ') Select * from 表名 where FREETEXT( 列名, ' "202*" and "2*"

全文检索ElasticSearch与Spring boot集成实例

筅森魡賤 提交于 2019-12-15 09:37:35
全文检索 1.全文搜索概念: (1)数据结构: ·结构化:只具有固定格式或者有限长度的数据,如数据库,元数据等 ·非结构化:指不定长或者无固定格式的数据,如邮件,word文档等 (2)非结构化数据的检索: ·顺序扫描法:适合小数据量文件 ·全文搜索:将非结构化的数据转为结构化的数据,然后创建索引,在进行搜索 (3)概念:全文搜索是一种将文件中所有文本域搜索项匹配的文件资料检索方式 2.全文搜索实现原理 3.全文搜索实现技术:基于java的开源实现Lucene,ElasticSearch(具有自身的分布式管理功能),Solr 4.ElasticSearch简介: 概念: (1)高度可扩展的开源全文搜索和分析引擎 (2)快速的,近实的多大数据进行存储,搜索和分析 (3)用来支撑有复杂的数据搜索需求的企业级应用 特点及介绍: (1)分布式 (2)高可用 (3)对类型,支持多种数据类型 (4)多API (5)面向文档 (6)异不写入 (7)近实时:每隔n秒查询,在写入磁盘中 (8)基于Lucene (9)Apache协议 5.ElasticSearch与Spring Boot集成 (1)配置环境:ElasticSearch,Spring Data ElasticSearch,JNA (2)安装ElasticSearch,下载包,解压直接启动即可

全文检索可视化动态管理(二)--solr二次开发和solrj扩展

我的未来我决定 提交于 2019-12-11 10:11:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 要完成solr的索引动态配置,需要solr提供动态新建、修改配置等的接口。solr虽提供core的添加删除,但不提供schema.xml修改新建接口,并且如果添加一个新core,也要将另一个core的conf配置文件复制一份到新的core文件夹下,然后管理页载入新的core。因此需要二次开发。 查看solr的web.xml,可以发现请求链接都进入org.apache.solr.servlet.SolrDispatchFilter。查看SolrDispatchFilter源码,可以在doFilter方式里看到,如果是adminPath的链接,则SolrRequestHandler的实现是cores.getMultiCoreHandler()。 进入getMultiCoreHandler()方法,可以得知是org.apache.solr.handler.admin.CoreAdminHandler。此类则是solr管理界面的Core Admin的接口处理类。因此,可以继承CoreAdminHandler,重载handleRequestBody方法来给solr增加所需的处理接口。 进一步查看源码,可以发现solr.xml里可以用adminHandler标签替换CoreAdminHandler。solr.xml: <