全文索引

关于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.索引是什么,为什么它这么重要?    假如你需要搜索大量的文件

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

mysql8使用自带全文索引(带中文分词)

回眸只為那壹抹淺笑 提交于 2020-03-18 18:00:18
修改配置文件: vim /etc/my.cnf [mysqld] ngram_token_size=2 创建表: create table test( id int(11) not null primary key auto_increment, name varchar(100) not null comment '工商名', brand varchar(100) default null comment '品牌名', en varchar(100) default null comment '英文名', fulltext key (name,brand,en) with parser ngram )engine=innodb default charset=utf8; insert into test (name,brand,en) values ('芜湖美的厨卫电气制造有限公司','aa','wh'); insert into test (name,brand,en) values ('北京凡客尚品电子商务有限公司','aa','ef'); insert into test (name,brand,en) values ('凡客诚品(北京)科技有限公司','aa','dfd'); insert into test (name,brand,en) values ('瞬联讯通科技

php+中文分词scws+sphinx+mysql打造千万级数据全文搜索

纵然是瞬间 提交于 2020-03-15 11:36:55
Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。 Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的特性如下: a) 高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒); b) 高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒); c) 可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档); d) 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法; e) 支持分布式搜索; f) 支持短语搜索 g) 提供文档摘要生成 h) 可作为MySQL的存储引擎提供搜索服务; i) 支持布尔、短语、词语相似度等多种检索模式; j) 文档支持多个全文检索字段(最大不超过32个); k) 文档支持多个额外的属性信息(例如:分组信息,时间戳等); l) 支持断词;

Lucene学习之四:Lucene的索引文件格式(1)

♀尐吖头ヾ 提交于 2020-03-15 08:35:50
本文转载自: http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。 Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。 本文详细解读了Apache Lucene - Index File Formats( http://lucene.apache.org/java/2_9_0/fileformats.html ) 这篇文章。 一、基本概念 下图就是Lucene生成的索引的一个实例: Lucene的索引结构是有层次结构的,主要分以下几个层次: 索引(Index): 在Lucene中一个索引是放在一个文件夹中的。 如上图,同一文件夹中的所有的文件构成一个Lucene索引。 段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。 如上图,具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。 segments

MySQL全文索引、联合索引、like查询、json查询速度大比拼

若如初见. 提交于 2020-03-03 07:55:30
查询背景 有一个表tmp_test_course大概有10万条记录,然后有个json字段叫outline,存了一对多关系(保存了多个编码,例如jy1577683381775) 我们需要在这10万条数据中检索特定类型的数据,目标总数据量: 2931 条 SELECT COUNT(*) FROM tmp_test_course WHERE `type`=5 AND del=2 AND is_leaf=1 我们在限定为上面类型的同时,还得包含下面任意一个编码(也就是OR查询) jy1577683381775 jy1577683380808 jy1577683379178 jy1577683378676 jy1577683377617 jy1577683376672 jy1577683375903 jy1578385720787 jy1499916986208 jy1499917112460 jy1499917093400 jy1499917335579 jy1499917334770 jy1499917333339 jy1499917331557 jy1499917330833 jy1499917329615 jy1499917328496 jy1576922006950 jy1499916993558 jy1499916992308 jy1499917003454

MySQL中文索引插件mysqlcft安装及使用

那年仲夏 提交于 2020-03-02 05:47:43
MySQL中文索引插件mysqlcft安装及使用 1. MySQL 必须是动态编译安装的,以便加载动态链接库。 2. 编辑 MySQL 配置文件 my.cnf ,在 [mysqld] 段中加入 ft_min_word_len=1 (意为最小词所占字节数) 3. 安装 mysqlcft 中文全文索引插件 从命令行登入 MySQL 服务器 查看 MySQL 插件目录 Show variables like ‘plugin_dir’; 下载 mysqlcft 中文索引插件,解压后复制 mysqlcft.so 文件到 MySQL 的插件目录下 https://code.google.com/p/mysqlcft 有 32 位与 64 位可选 开始安装 mysqlcft.so 插件 Install plugin mysqlcft soname ‘mysqlcft.so’; 查看 mysqlcft.so 插件是否安装成功 show plugins; 4. 卸载 mysqlcft.so 插件,卸载前请先删除使用 mysqlcft 建立的全文索引。 uninstall plugin mysqlcft; 5. 为已经存在的表添加 mysqlcft 中文全文索引 创建单列全文索引 alter ignore table 数据库名 . 表名 add fulltext index 全文索引名 ( 字段名 )

Lucene-全文检索

佐手、 提交于 2020-03-01 21:02:28
全文检索   数据分类       结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。针对结构化数据的搜索,列如对数据库的搜索,可以使用SQL语句。再如对元数据的搜索,列如Windows中对文件名,类型和修改时间进行搜索等;       非结构化数据:指不定长或没有固定格式的数据,例如邮件,word文档等。对非结构化数据的搜索,例如Windows中对文件内容的搜索,Linux中grep命令,以及使用Google或百度来搜索内容都属于对全文数据的搜索;       对结构化的数据,可以使用搜索算法按照结构较快地进行检索;       但是对非结构化的数据,由于没有特定结构,因此在数据量比较小的时候,可以使用顺序扫描法,一个文件一个文件地找,找到包含检索字符串的文件。如Windows文件搜索,Linux中grep命令。这样的方法对于数量较小的比较直接,但是对于数据量较大的文件检索效率较低。   结构化数据搜索     常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且很快的得到查询结构。   非结构化数据查询方法     顺序扫描法(Serial Scanning)       所谓顺序扫描法,比如要找内容包含某一个字符串的文件,就是一个一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串

Mysql之索引分享

烈酒焚心 提交于 2020-03-01 04:02:48
索引介绍 索引的种类 B-Tree 索引 最常见的索引类型,大部分引擎都支持B树索引。 HASH 索引 只有Memory引擎支持,使用场景简单。 R-Tree 索引(空间索引) 空间索引是MyISAM的一种特殊索引类型,主要用于地理空间数据类型。 Full-text (全文索引) 全文索引也是MyISAM的一种特殊索引类型,主要用于全文索引,InnoDB从MYSQL5.6版本提供对 高性能索引策略 覆盖索引 联合索引 索引下推 来源: CSDN 作者: Benett-Chen 链接: https://blog.csdn.net/sky_100/article/details/104578135

Lucene的索引文件格式(1)

醉酒当歌 提交于 2020-03-01 03:38:39
Lucene学习总结之三:Lucene的索引文件格式(1) Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。 Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。 一、基本概念 下图就是Lucene生成的索引的一个实例: Lucene的索引结构是有层次结构的,主要分以下几个层次: 索引(Index): 在Lucene中一个索引是放在一个文件夹中的。 如上图,同一文件夹中的所有的文件构成一个Lucene索引。 段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。 如上图,具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。 segments.gen和segments_5是段的元数据文件,也即它们保存了段的属性信息。 文档(Document): 文档是我们建索引的基本单位,不同的文档是保存在不同的段中的,一个段可以包含多篇文档。 新添加的文档是单独保存在一个新生成的段中,随着段的合并,不同的文档合并到同一个段中。 域(Field):