全文索引

lucene中文教程

允我心安 提交于 2020-02-12 11:51:08
lucene是什么? lucene是基于java的开源全文索引工具包。 开源好理解,开放源代码嘛!可是,这个全文索引是什么东西?全文索引是索引的一种,不了解索引的朋友可以看这篇文章( 索引是什么 )。索引是一种有特殊数据结构的数据。在某种情况,通过它,可以对数据进行快速查询。 简而言之,lucene是一个jar包,这个jar包有很多的工具类,可以帮助你创建一种名叫全文索引的索引,可以帮助你使用这些被创建的索引来进行快速检索。 lucene的原理是什么? 这个问题描述的不准确,应该是lucene能够进行快速检索的原理是什么?这个问题lucene的定义"lucene是基于java的开源全文索引工具包"已经给出了答案。通过lecene提供的工具,你对需要进行搜索的原数据(文档,网页,数据库等)进行索引操作,生成一份全文索引数据。在进行检索的时候,你不是对原数据, 而是对索引数据进行搜索的,所以你的检索效率才有了指数级提高(索引数据有利于检索的数据结构)。 什么是全文索引? 全文索引,又称倒排索引(反向索引)(inverted index),与之相对应的是正排索引(正向索引)(forward index)。 正排索引:无论课本,杂志,还是报纸,它们都拥有一个目录。假如我们想看某篇文章,通过目录,我们可以快速的找到这篇文章所在的页面,而不是笨拙的一页页的去翻看这本书。这里,目录就是一个索引

索引与触发器

百般思念 提交于 2020-02-11 16:19:28
1》索引的含义和特点:     索引是什么,索引相当于字典里面的目录序表,比如查询一个“星”字,如果不按照拼音来找的话,那么我们需要把整个字典全部遍历查询一边。才能查到这个字, 如果按照拼音来找的,那么只需要在几页音序表中查询。就可以通过音序就快速查到,这个字在字典的哪一页。在数据库中,索引是建立在表上面的,索引可以很大程 度上提高数据库的查询,同时也提高了数据库的性能,不同的存储引擎定义了索引的最大长度和索引的数量,所有的存储引擎对每个表最少支持16个索引,索引的长度 最少支持位256字节;   索引优点:     其优点可以提高数据的检索速度,针对于有依赖关系的子表和父表,在联合查询的时候可以提高查询速度。   索引的缺点:     创建和维护索引需要消耗时间,索引需要占用物理空间,每一个索引都需要占用一定的物理空间,大量的索引会影响插入数据,数据库系统会按照索引进行排 序,这样降低了插入数据的速度;    解决办法:在插入数据时,先临时删除表的索引,然后插入数据,数据插入完成后,再创建索引。 2》索引的分类:   Mysql的索引类型有:普通索引,唯一性索引,全文索引,单列索引、多列索引和空间索引等;   1>普通索引     创建普通索引时,不附加任何限制条件,,这类索引可以创建在任何的数据类型上面,   2>唯一性索引     使用unique参数可以设置唯一索引

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

MySQL 之全文索引

て烟熏妆下的殇ゞ 提交于 2020-02-06 01:48:18
最近在复习数据库索引部分,看到了 fulltext,也即全文索引,虽然全文索引在平时的业务中用到的不多,但是感觉它有点儿意思,所以花了点时间研究一下,特此记录。 引入 概念 通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。全文索引就是为这种场景设计的。 你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。全文索引在大量的数据面前,能比 like + % 快 N 倍,速度不是一个数量级,但是全文索引可能存在精度问题。 你可能没有注意过全文索引,不过至少应该对一种全文索引技术比较熟悉:各种的搜索引擎。虽然搜索引擎的索引对象是超大量的数据,并且通常其背后都不是关系型数据库,不过全文索引的基本原理是一样的。 版本支持 开始之前,先说一下全文索引的版本、存储引擎、数据类型的支持情况 MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引; MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引; 只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。 测试或使用全文索引时,要先看一下自己的

我的MYSQL学习心得(九)

血红的双手。 提交于 2020-02-04 03:12:37
原文: 我的MYSQL学习心得(九) 我的MYSQL学习心得(九) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 这一篇《我的MYSQL学习心得(九)》将会讲解MYSQL的索引 索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型。 根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。 大多数存储引擎有更高的限制。MYSQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关; MYISAM和InnoDB存储引擎只支持BTREE索引;MEMORY和HEAP存储引擎可以支持HASH和BTREE索引 索引的优点: 1、通过创建唯一索引,保证数据库表每行数据的唯一性 2、大大加快数据查询速度 3、在使用分组和排序进行数据查询时,可以显著减少查询中分组和排序的时间 索引的缺点: 1、维护索引需要耗费数据库资源 2、索引需要占用磁盘空间,索引文件可能比数据文件更快达到最大文件尺寸 3、当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响 索引的分类 1

2.索引优化分析

試著忘記壹切 提交于 2020-02-02 15:59:08
性能下降SQL慢 、执行时间长 、 等待时间长 常见原因: 1.查询语句写的烂 2.索引失效 #id name email weixinNumber select *from user where name=""; select *from user where name="" and email=""; create index idx_user_name on user(name);#单值 create index idx_user_nameEmail on user(name,email);#复合 2.关联查询太多join(设计缺陷或不得已的需求) 3.服务器调优及各个参数设置(缓冲\线程数等) sql 执行顺序 #手写sql的顺序 7 select 8 distinct <select_list> 1 from <left_table> 3 <join_type> join <right_table> 2 on <join_condition> 4 where <where_condition> 5 group by <groupby_list> 6 having <having_condition> 9 order by <orderby_conditoin> 10 limit <limit number>; #机读 1. FROM <left_table> 2. ON

sqlserver如何添加全文索引

折月煮酒 提交于 2020-02-02 00:48:16
在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数 据的速度,不用在用LIKE这样低效率的模糊查询了。 下面简明的介绍如何使用Sql2008 全文索引 一、检查服务里面带有Full-text字样的服务是否存在并开启 如果不存在带有Full-text字样的服务的,确认是否安装了sqlserverFullTextSearch --检查数据库PS2是否支持全文索引,如果不支持 --则使用sp_fulltext_database 打开该功能 if(select databaseproperty('PS2','isfulltextenabled'))=0 execute sp_fulltext_database 'enable' 二、新建全文目录 全文目录是用来存储全文索引的 三、为表定义全文索引 四、点击下一步,按提示选择 1.确认下一步 2.选择唯一索引,通常是主键 3.选择要建立的全文索引列,对于断字符的选择如果列存的是中文就选择chinese,如果是英文就选择English 4.选择索引更新方式,可以先自动更新,以后数据量大了可以设置添加全文索引的计划 5.选择全文目录 五、全文索引的SQL查询关键字 建立好全文索引后就可以使用SQL语句来查询了,主要用带三个关键字 CONTAINS、FREETEXT

Lucene、Solr、ElasticSearch、hibernate-search四部曲

纵然是瞬间 提交于 2020-01-31 14:49:14
【前言】 从前年的时候,我都在心里有个想法。我想自己做一套搜索功能。在心里我是这么想的: 1、有个资源信息库,供我查询,这个资源库可能包含各种途径生成的统一格式的数据库。 2、查询时,我先整段匹配资源库找到资源。 3、接下来就是分词了,这里我联想到了一些输入法的细胞词库。也就是说能不能按照细胞词库先匹配我们的搜索内容,然后将分词后的搜索条件进行匹配查询。 4、按照匹配度的高低进行排序。 直到昨天,在工作中刚刚得知Lucene、Solr。 【简介】 Lucene是apache软件基金会(这个咱们前面介绍过)的一个子项目,是一个开源的全文检索引擎工具包,但不是一个完全的全文检索引擎,是一个全文检索引擎的架构,提供完整的查询引擎和索引引擎,部分文本分析引擎。 Solr是一个独立的企业及搜索应用服务器,用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引。也可以通过http get提出查找请求得到XML格式的返回结果。 【Lucene 和solr】 本质区别在于: 1、Lucene是搜索库,不是独立的应用程序,而Solr是。 2、Lucene专注于搜索底层的建设,而Solr专注企业应用。 3、Lucene不负责支撑搜索服务所必须的管理,而Solr负责。 也就是说:Solr是Lucene面向企业搜索的应用扩展。也就是说,像学好Solr先学Lucene。 【问

lucent,solr,ES比较

随声附和 提交于 2020-01-31 07:57:02
| 0 什么是全文搜索 什么是全文搜索引擎? 百度百科中的定义 : 全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。 从定义中我们已经可以大致了解全文检索的思路了,为了更详细的说明,我们先从生活中的数据说起。 我们生活中的数据总体分为两种: 结构化数据 和 非结构化数据 。 结构化数据 : 指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据 : 非结构化数据又可称为全文数据,指不定长或无固定格式的数据,如邮件,word文档等。 当然有的地方还会有第三种: 半结构化数据 ,如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。 根据两种数据分类,搜索也相应的分为两种:结构化数据搜索和非结构化数据搜索。 对于结构化数据,我们一般都是可以通过关系型数据库(mysql,oracle等)的 table 的方式存储和搜索,也可以建立索引。 对于非结构化数据,也即对全文数据的搜索主要有两种方法: 顺序扫描法 , 全文检索 。 顺序扫描 :通过文字名称也可了解到它的大概搜索方式

搜索引擎选择: Elasticsearch与Solr

心不动则不痛 提交于 2020-01-31 02:04:24
Elasticsearch简介 * Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合。 Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架。 但是Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene。需要很多的学习了解,才能明白它是如何运行的,Lucene确实非常复杂。 Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理。 当然Elasticsearch并不仅仅是Lucene这么简单,它不但包括了全文搜索功能,还可以进行以下工作: 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。 实时分析的分布式搜索引擎。 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。 这么多的功能被集成到一台服务器上,你可以轻松地通过客户端或者任何你喜欢的程序语言与ES的RESTful API进行交流。 Elasticsearch的上手是非常简单的。它附带了很多非常合理的默认值