lucene

Lucene全文检索系列(一)

核能气质少年 提交于 2020-02-29 10:04:28
1. Lucene简介 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能。 2. lucene 的包结构 1、analysis对需要建立索引的文本进行分词、过滤等操作 2、standard是标准分析器 3、document提供对Document和Field的各种操作的支持。 4、index是最重要的包,用于向Lucene提供建立索引时各种操作的支持 5、queryParser提供检索时的分析支持 6、search负责检索 7、store提供对索引存储的支持 8、util提供一些常用工具类和常量类的支持 Lucene中的类主要组成如下: 1)org.apache.1ucene.analysis语言分析器,主要用于的切词Analyzer是一个抽象类,管理对文本内容的切分词规则。 2)org.apache.1uceene.document索引存储时的文档结构管理,类似于关系型数据库的表结构。 3)document包相对而言比较简单,该包下面有3个类,document相对于关系型数据库的记录对象,Field主要负责字段的管理。 4)org.apache.1ucene.index索引管理,包括索引建立、删除等。索引包是整个系统核心

1.Lucene简介

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-29 10:04:10
1.Lucene简介    Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能   Lucene是开源项目,它是可扩展,高性能的库用于索引和搜索几乎任何类型的文本, Lucene库提供了所需的任何搜索应用程 序的核心业务。索引和搜索   实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键 词出现在哪里 2.Lucene的特点    倒排索引 压缩算法 二元搜索    1.1.倒排索引 :      根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确 定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(invertedindex)      例如:单词——文档矩阵(将属性值放在前面作为索引)        3.Lucene的工作方式   lucene提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删 除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源    写入流程 : 源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选)。 将源中需要的信息加入

谈谈lucene的DocValues合并(BinaryField域的合并过程)

你。 提交于 2020-02-28 04:21:56
在 谈谈lucene的DocValues特性之BinaryDocValuesField 中说过,BinaryField的写入方式是按照文档的添加顺序依次写入的,并且压缩方式也较简单,其实合并的方式也很简单,即将已生成的各段BinaryDocValues单纯的重新写入到一个新的段中: 对于每个段都对应一个BinaryDocValuesSub,由一个DocMap与BinaryDocValues构成)。DocMap用于返回当前数据段中的docId对应到新段中的值: 由于BinaryDocValues没有IndexSort选项,因此只考虑以下两种情况:如果没有文档删除,每段中的文档ID在新生成的段中的ID=前一个段中的文档数量+当前段中的文档ID;如果某个数据段存在文档删除,例如有10篇文档,ID号为0-9(第1、5、8三篇文档被删除后)则重新变成: 而BinaryDocValues只需获取当前docID对应的值即可。 来源: oschina 链接: https://my.oschina.net/u/1268334/blog/3161519

Lucene FuzzyQuery 原理

孤者浪人 提交于 2020-02-28 04:21:20
基于 Levenshtein Edit Distance (莱温斯坦编辑距离)基础上,对索引文档进行 模糊搜索 Levenshtein算法是计算两个字符串之间的 最小编辑距离 的算法, 所谓的最小编辑距离就是把字符串A通过 添加 , 删除 , 替换 字符的方式转变成B所需要的 最少步骤 比如:你文档里有个xiaopingguo字符,你拿“xiapngguo”去匹配,这时我们知道他们的编辑距为2, 具体步骤就是ap之间插入一个字母o,pn之间插入一个字母i,所以编辑距为2, 代码详见LevenshteinTest /** * @author Jly * @date 2020/1/16 19:40 */ public class LevenshteinTest { public static int levenshtein (String str1 , String str2) { int n = str1.length() ; int m = str2.length() ; if ( n == 0 ) return m ; if ( m == 0 ) return n ; int [][] Arr = new int [m + 1 ][n + 1 ] ; int cost = 0 ; for ( int i= 0 ; i<=n ; i++) Arr[ 0 ][i] = i ; for

Find actual matching word when using fuzzy query in elastic search

杀马特。学长 韩版系。学妹 提交于 2020-02-27 23:22:09
问题 I am new to elasticsearch and was looking around fuzzy query search. I have made a new index products with object/record values like this { "_index": "products", "_type": "product", "_id": "10", "_score": 1, "_source": { "value": [ "Ipad", "Apple", "Air", "32 GB" ] } } Now when i am performing a fuzzy query search in elasticsearch like { query: { fuzzy: { value: "tpad" } } } It returns me the correct record (the product just made above) which is expected. And i know that the term tpad matches

分布式搜索引擎的架构是怎么设计的?

喜夏-厌秋 提交于 2020-02-27 16:01:01
业内目前来说事实上的一个标准,就是分布式搜索引擎一般大家都用elasticsearch (1) es的分布式架构原理能说一下么(es是如何实现分布式的啊) 面试官心里分析 在搜索这块,lucene是最流行的搜索库。几年前业内一般都问,你了解lucene吗? 你知道倒排索引的原理吗?现在早已经out了,因为现在很多项目都是直接用基于lucene的分布式搜索引擎--elasticsearch,简称es. 而现在分布式搜索基本已经成为大部分互联网行业的java系统的标配,其中尤为流行的就是es,前几年es没火的时候,大家一般用solr,但是这两年基本大部分企业和项目都开始转向es了。 所以互联网面试,肯定会跟你聊聊分布式搜索引擎,也就一定会聊聊es,如果你确实不知道,那你真的就out了。 如果面试官问你第一个问题,确实一般都会问你es的分布式架构设计能介绍一下么?就看看你对分布式搜索引擎架构的一个基本理解。 面试的剖析 elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。 核心思想就是在多台机器上启动多个es进程实例,组成了一个es集群。 es中存储数据的基本单位是索引,比如说你现在要在es中存储一些订单数据,你就应该在es中创建一个索引,order_idx,所有的订单数据就都写到这个索引里面去,一个索引差不多就是相当于是mysql里的一张表

elasticsearch的store属性跟_source字段

Deadly 提交于 2020-02-27 13:29:57
转摘文章,建议阅读原文 众所周知_source字段存储的是索引的原始内容,那store属性的设置是为何呢?es为什么要把store的默认取值设置为no?设置为yes是否是重复的存储呢? 我们将一个field的值写入es中,要么是想在这个field上执行search操作(不知道具体的id),要么执行retrieve操作(根据id来检索)。但是,如果不显式的将该field的store属性设置为yes,同时_source字段enabled的情况下,你仍然可以获取到这个field的值。这就意味着在一些情况下让一个field不被index或者store仍然是有意义的。 当你将一个field的store属性设置为true,这个会在lucene层面处理。lucene是倒排索引,可以执行快速的全文检索,返回符合检索条件的文档id列表。在全文索引之外,lucene也提供了存储字段的值的特性,以支持提供id的查询(根据id得到原始信息)。通常我们在lucene层面存储的field的值是跟随search请求一起返回的(id+field的值)。es并不需要存储你想返回的每一个field的值,因为默认情况下每一个文档的的完整信息都已经存储了,因此可以跟随查询结构返回你想要的所有field值。 有一些情况下,显式的存储某些field的值是必须的:当_source被disabled的时候

全文搜索引擎 Elasticsearch 入门:集群搭建

南楼画角 提交于 2020-02-27 12:19:13
本文主要介绍什么是 ElasticSearch 以及为什么需要它,如何在本机安装部署 ElasticSearch 实例,同时会演示安装 ElasticSearch 插件,以及如何在本地部署多实例集群,方便在日后学习分布式相关原理。 什么是 ElasticSearch? ElasticSearch 是一个基于 Lucene 的搜索服务器,它提供了一个 分布式 多用户能力的全文搜索引擎,基于 RESTful web 接口。 ElasticSearch 是用 Java 开发的 ,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,其中维基百科、Stack Overflow、Github 的搜索都是基于 ElasticSearch 构建的。 简而言之,ElasticSearch 是一个 开源 的 近实时 的 分布式存储、搜索、分析引擎 。 ElasticSearch 的主要功能简单来说就是两方面- 搜索 和 聚合 (比如最近7天口罩商品销量排名前10的商家列表),另外当海量数据不断增长的时候,还提供分布式存储以及集群管理能力。 因为 ElasticSearch 是起源于 Lucene 的,在这里简单地介绍下 Lucene: Lucene 就是一个 jar 包,里面包含了封装好的各种建立 倒排索引

ElasticSearch数据库(ES数据库)简介

99封情书 提交于 2020-02-27 06:55:34
一 elasticsearch简介 **ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。**Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。 1 elasticSearch的使用场景 1、为用户提供按关键字查询的全文搜索功能。 2、实现企业海量数据的处理分析的解决方案。大数据领域的重要一份子,如著名的ELK框架(ElasticSearch,Logstash,Kibana),。 2 与其他数据存储进行比较 3 elasticsearch的特点 3.1 天然分片,天然集群 es 把数据分成多个shard,下图中的P0-P2,多个shard可以组成一份完整的数据,这些shard可以分布在集群中的各个机器节点中。随着数据的不断增加,集群可以增加多个分片,把多个分片放到多个机子上,已达到负载均衡,横向扩展。 在实际运算过程中,每个查询任务提交到某一个节点,该节点必须负责将数据进行整理汇聚,再返回给客户端,也就是一个简单的节点上进行Map计算,在一个固定的节点上进行Reduces得到最终结果向客户端返回。 3.2 天然索引 ES 所有数据都是默认进行索引的,这点和mysql正好相反,mysql是默认不加索引,要加索引必须特别说明

相关性搜索笔记

僤鯓⒐⒋嵵緔 提交于 2020-02-26 22:42:54
第二章:搜索 词典表和倒排表 文档位置很重要,用来做高亮显示 为什么高亮显示重要呢? 比较直观的展示搜索结果的相关性,给用户提供反馈 对原始数据提取、充实、分析、索引 内容提取为文档 充实:清理、强化、合并数据 分析:将文档转化为token 包括:字符过滤、分词处理、token过滤 字符过滤: 分词处理: token 过滤 stop words(禁用词)去掉 布尔搜索和Lucene的BooleanQuery的区别 布尔搜索 AND、OR、NOT Lucene的BooleanQuery 三个查询子句 MUST、SHOULD、MUST_NOT token做为文档特征 token分析,获取有意义的信息,对客户意图的判断 查准率和查全率 来源: oschina 链接: https://my.oschina.net/u/3847203/blog/3159255