全文索引

Mysql中的索引

末鹿安然 提交于 2019-12-01 17:13:19
1,什么是索引,为什么要使用索引? 索引是帮助Mysql高效获取数据的排好序的数据结构。建立索引可以帮助我们快速检索我们需要的信息,减少磁盘的I/O次数,加快检索速度。索引的数据结构包括:二叉树,红黑树,Hash表,B-树等。 2,数据查询的方式 二叉查找树的方式查找信息 普通情况下,在一个二叉树中查找到5非常快速。只需要2步,但在某些极端情况下,如对于顺序插入信息的二叉树,查找到我们需要的信息就非常麻烦了。 红黑树 红黑树是一种 自平衡二叉查找树 ,就是会自动平衡更新根节点和其它节点的位置,也就是说根节点和其它节点的位置是不固定,会根据插入的信息进行动态改变的。 按照1~5的顺序插入数据后,会重新排列分支节点的位置。 对于少量数据使用红黑树是完全可以的,但是一个项目的数据库中存储的数据都是10万条以上,再使用红黑树,树的度又会变得很大了。这个时候就可以使用B 树了。 B 树 B树是一种 多路自平衡搜索树 ,它是一种特殊的平衡二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下: B树的特点: (1)所有键值分布在整个树中(2)任何关键字出现且只出现在一个节点中 (3)搜索有可能在非叶子节点结束(4)在关键字全集内做一次查找,性能逼近二分查找算法 比如我们想要找到主键为28的数据,过程如下: 1,根据根节点找到磁盘块1,进行一次I/O(磁盘的输入和输出)操作; 2

Lucene及全文搜索实现原理

痴心易碎 提交于 2019-12-01 13:07:48
Lucene及全文搜索实现原理 全文搜索 全文搜索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文搜索搜索引擎数据库中的数据。 全文搜索的过程主要分为两个部分,索引的建立以及索引的搜索。 国内外的全文搜索常用的检索模型主要有向量模型,布尔模型等。 布尔模型 布尔模型是第一个信息检索的模型,可能也是最受争论的模型。它利用布尔运算符连接各个检索词,然后由计算机进行逻辑运算,找出所需信息的一种检索方法。布尔定义了三种基本操作:AND,OR和NOT。 概率检索模型 多是建立在相关性理论基础上,基于对相关性的不同理解而建立了不同的概率检索模型,而且由此导出不同的排序输出原则。可以说相关性原理及排序原理是概率检索模型的理论核心。 向量模型 向量空间模型(Vector Space Model,VSM)在上世纪70年代由信息检索领域奠基人Salton教授提出来,并成功地应用于著名的SMART文本检索系统。把对文本内容的处理简化为向量空间中的向量运算,它以空间上的相似度表达语义的相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间的相似性来度量文档间的相似性

Lucene笔记

a 夏天 提交于 2019-12-01 07:54:16
Lucene是什么 Lucene是一个开源的全文检索引擎工具包, 但它不是一个完整的全文检索引擎, 而是一个全文检索引擎的架构, 提供了完整的查询引擎和搜索引擎以及部分文本分析引擎。可以把它理解成一个信息检索程序库, 而不是应用产品, 具体的功能需要使用者自己去以代码实现。 Lucene的功能 本质: 输入若干个字符串, 然后Lucene为使用者提供了一个全文搜索服务, 最后告诉使用者要搜索的关键词在哪里。 搜索引擎 Lucene速度测试 测试一:250万记录,300M左右文本,生成索引380M左右,800线程下平均处理时间300ms。 测试二:37000记录,索引数据库中的两个varchar字段,索引文件2.6M,800线程下平均处理时间1.5ms。 Lucene核心 倒排索引 根据属性的值来查找记录。索引表中的每一项都包括一个属性值和具有该属性值的各记录的抵地址 由于不是由记录来确定属性值, 而是由属性值来确定记录的位置, 因此被被称为倒排索引(invertedindex) # import(输入) 1.Alex works in Facebook for three years. 2.John is a professional data-science analyzer. 3.Ronnie is just a noob in data-excavating field. 4

Lucene

微笑、不失礼 提交于 2019-12-01 01:29:31
一.全文检索 1.非结构化数据: 这种先建立索引,再对索引进行搜索的过程就叫全文检索 (Full-text Search) 2.应用场景: 对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,比如百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。 3.流程: 二.程序实现: 1.创建索引:   *环境:Lucene 第一步:创建一个java工程,并导入jar包。 第二步:创建一个indexwriter对象。 1)指定索引库的存放位置Directory对象 2)指定一个IndexWriterConfig对象。 第二步:创建document对象。 第三步:创建field对象,将field添加到document对象中。 第四步:使用indexwriter对象将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。 第五步:关闭IndexWriter对象。 2.使用Luke工具查看索引文件 *Luke必须使用java-9来使用:M:\java\luke-7.4.0\target 3.查询索引库 第一步:创建一个Directory对象,也就是索引库存放的位置。 第二步:创建一个indexReader对象,需要指定Directory对象。 第三步:创建一个indexsearcher对象,需要指定IndexReader对象 第四步

ElasticSearch学习资料

余生颓废 提交于 2019-11-30 15:01:31
搜索引擎: 搜索引擎:全文索引,目录索引,元搜索引擎,垂直搜索引擎、集合式搜索引擎,门户搜索引擎。 全文索引引擎:搜索,建立起数据库,返回结果。 全文检索思路:非结构化的一部分信息提取出来-》重新组织-》变成一定结构(索引)-》提高搜索速度 基于lucene纯java全文搜索工具包,提供完整查询引擎和索引引擎 Apache基金的子项目 lucene是一个IR库(informationretrieval library)不是web爬行器。 lucene:1.对要搜索的文件建立索引 2.在索引的基础上搜索 Lucene:采用反向索引机制,通过特定的API建立索引。 倒排索引:基础知识: 文档(Document) 文档集合(Document Collection) 文档编号(Document ID)单词编号(word ID) 倒排索引(Inverted Index)单词-文档矩阵的一种具体形式。 单词词典(Lexicon)搜索引擎的通常索引单位是单词。单词词典内每条索引项记载单词本身的一些信息以及指向倒排列表的指针。 倒排列表(PostingList)出现过某个单词的所有文档的文档列表以及该单词在文档中的位置信息,每条记录称为一个倒排项(Posting),根据倒排列表可以获知哪些文档包含某个单词。 倒排文件:存放倒排列表的文件称为倒排文件,存放倒排索引的物理文件 注意:单词词典在内存

lucene全文检索

浪尽此生 提交于 2019-11-30 13:23:50
什么是全文检索 将数据分为两类, 结构化数据和非结构化数据 结构化数据: 有固定格式和有限长度, 比如关系型数据库中的数据, 查询的方式: sql 在数据量特别大的时候,可以考虑使用全文检索技术 非结构化数据: 没有固定格式和没有规定长度,比如电脑上的文档:txt,word 查询方式: 对于少量数据可以肉眼查找 对于大量数据可以使用全文检索技术 二.什么是全文检索技术 全文检索: 先建立索引,再对索引进行搜索的过程就叫做全文检索技术 三. 全文检索适用场景 分为三种情形 搜索引擎: 谷歌 百度 360 搜狗 搜搜 站内搜索: 网站内部进行搜索,如京东,淘宝,天涯,微博,猫扑 垂直搜索: 视屏网站的搜索,比如在优酷中可以搜索到腾讯的视频 四. 如何实现全文检索 在这里可以使用lucene进行实现 五. 什么是lucene? lucene 是apache提供用来实现全文检索的一套类库,jar,并不是框架 需要使用的坐标 第一步:导入jar 必须的包:lucene-core-4.10.3.jar lucene-analyzers-common-4.10.3.jar 分词器 commons-io.jar junit.jar <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers

实战 Lucene,第 1 部分: 初识 Lucene

↘锁芯ラ 提交于 2019-11-30 10:07:04
本文首先介绍了 Lucene 的一些基本概念,然后开发了一个应用程序演示了利用 Lucene 建立索引并在该索引上进行搜索的过程。 朋 周登 ( zhoudengpeng@yahoo.com.cn ), 软件工程师 2006 年 4 月 20 日 内容 Lucene 简介 索引和搜索 Lucene 软件包分析 一个简单的搜索应用程序 建立索引 搜索文档 总结 评论 Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 HTML 文档,PDF 文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene 进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使 Lucene

MySQL—04—MySQL的其他对象

不问归期 提交于 2019-11-30 07:14:57
一、 MySQL 中的其他对象 1. 索引 MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。 1.1MySQL 中的索引类型 • 普通索引 • 唯一索引 • 主键索引 • 组合索引 • 全文索引 1.2 普通索引 是最基本的索引,它没有任何限制。 在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串 类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。 创建索引时需要注意: 如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。 查询索引:SHOW INDEX FROM table_name 1.2.1 直接创建索引 CREATE INDEX index_name ON table(column(length)) 示例 为 emp3 表中的 name 创建一个索引,索引名为 emp3_name_index create index emp3_name_index ON emp3(name) 1.2.2 修改表添加索引 ALTER TABLE table_name ADD INDEX index_name (column(length)) 示例 修改 emp3 表,为 addrees 列添加索引,索引名为 emp3_address

用php来实现lucene包来实现全文检索

前提是你 提交于 2019-11-30 02:48:22
因为PHP本身就支持调用外部Java类,所以先用Java写了一个类, 这个类通过调用Lucene的API,实现了两个方法: * public String createIndex(String indexDir_path,String dataDir_path) * public String searchword(String ss,String index_path) 其中createIndex是创建索引方法, 传入了两个参数分别是indexDir_path(索引文件的目录),dataDir_path(被索引的文件目录),返回被索引的文件列表字符串, 另一个是searchword,通过传入的关键字参数(ss)对索引进行检索,index_path就是索引文件的目录。返回所有检索到的文件。 这里是源代码,很简单,大家可以参考一下: TxtFileIndexer.java 而PHP程序就调用这两个方法,实现对Lucene的调用,从而达到全文检索的目的。 PHP的调用方法如下: 先创建一个我们写的TxtFileIndexer类的实例, $tf = new Java('TestLucene.TxtFileIndexer'); 然后就按正常PHP类的调用方法的方式进行调用,首先创建索引: $data_path = "F:/test/php_lucene/htdocs/data/manual

Lucene实现全文检索的流程

倾然丶 夕夏残阳落幕 提交于 2019-11-29 23:24:46
索引和搜索流程图 绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括: 确定原始内容(即要搜索的内容)-->采集文档-->创建文档-->分析文档-->索引文档 红色表示搜索过程,从索引库中搜索内容,搜索过程包括: 用户通过搜索界面-->创建查询-->执行搜索,从索引库搜索-->渲染搜索结果 创建索引 对文档索引的过程,将用户要搜索的文档内容进行索引,索引存储在索引库(index)中。 这里我们要搜索的文档是磁盘上的文本文件,根据案例描述:凡是文件名或文件内容包括关键字的文件都要找出来,这里要对文件名和文件内容创建索引。 1)获得原始文档 原始文档 是指要索引和搜索的内容。原始内容包括互联网上的网页、数据库中的数据、磁盘上的文件等。 2)创建文档对象 获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档( Document ),文档中包括一个一个的域( Field ),域中存储内容。 这里我们可以将磁盘上的一个文件当成一个 document , Documen t中包括一些 Field ( file_name 文件名称、 file_path 文件路径、 file_size 文件大小、 file_content 文件内容),如下图: 注意:每个 Document 可以有多个 Field ,不同的 Document 可以有不同的 Field ,同一个