lucene

NetCore and ElasticSearch 7.5

喜欢而已 提交于 2020-08-12 14:58:28
NET Core接入ElasticSearch 7.5 写在前面 最近一段时间,团队在升级ElasticSearch(以下简称ES),从ES 2.2升级到ES 7.5。也是这段时间,我从零开始,逐步的了解了ES,中间也踩了不少坑,所以特地梳理和总结一下相关的技术点。 ES小趣闻: 多年前,一个叫做Shay Banon的刚结婚不久的开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始使用Lucene进行尝试。 直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。 后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。 然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。 Shay的妻子依旧等待着她的食谱搜索…… 由此看见,一个成功的男人背后总是站着一个女人,所以程序员们要早点找到对象,可程序员找到女朋友又谈何容易,程序猿注定悲伤-_-||。 ElasticSearch基础知识 EElasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,ES底层基于开源库Apache Lucene

es基础

☆樱花仙子☆ 提交于 2020-08-11 19:44:05
一、es中的基本概念 索引(index) :类似于db中的database概念。一个可检索的文档对象的集合。 类型(type) :相当于table 文档(document) :相当于数据库中的row。是es中可以被检索的基本单位 字段(field) :相当于数据库中的column。es中,每个文档都是以json形式存储的。一个文档可以被视为多个字段的集合。 映射(mapping) :相当于数据库中的schema,用来约束字段的类型,不过es的mapping可以不显示指定,自动根据文档的数据创建 副本分片(Replica shard) :每个主分片可以有一个或者多个副本,个数是用户自己配置的。es会尽量将同一索引的不同分片分布到不同的节点,提高容错性。对于一个索引,只要不是所有的shards所在的机器都挂了,就还能用。 主分片 :索引的一个物理子集。同一个索引再物理上可以切多个分片,分布到不同的节点上。分片的实现是lucene中的索引。 二、es的使用 1.TermQueryBuilder,单个查询,仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条 //查询type中id为给定参数的文档 TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("id",param.getId()); 2

全文搜索Lucene之倒排索引

放肆的年华 提交于 2020-08-11 12:13:35
结论:关系数据库不适合做全文搜索: like '%xxx%' 效率很慢,建的索引将无效,查询的时候会像翻书一样一页一页的翻, 返回的结果没有匹配度的概念,比如可能希望搜索的关键词在文章中出现的次数越多越是我想要的文章, 当搜索 live 的时候,也想把 LIVE/lives/living 搜出来,但是数据库很难做到。 一、简介 倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引( inverted index )。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件( inverted file )。 倒排文件(倒排索引),索引对象是文档或者文档集合中的单词等,用来存储这些单词在一个文档或者一组文档中的存储位置,是对文档或者文档集合的一种最常用的索引机制。 搜索引擎的关键步骤就是建立倒排索引,倒排索引一般表示为一个关键词,然后是它的频度(出现的次数),位置(出现在哪一篇文章或网页中,及有关的日期,作者等信息),它相当于为互联网上几千亿页网页做了一个索引,好比一本书的目录、标签一般。读者想看哪一个主题相关的章节,直接根据目录即可找到相关的页面。不必再从书的第一页到最后一页,一页一页的查找。 二、Lucene倒排索引原理 Lucerne

深入分析ES存储原理

[亡魂溺海] 提交于 2020-08-11 10:05:36
es写数据 es写数据的过程 1、 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。 2、 coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。 3、 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node。 4、 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 es读数据过程 可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard 去查询。 1、客户端发送请求到任意一个 node,成为 coordinate node。 2、coordinate node 对 doc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin随机轮询算法,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡。 3、接收请求的 node 返回 document 给 coordinate node。 4、coordinate node 返回 document

ES参数说明

落花浮王杯 提交于 2020-08-11 09:58:22
Elasticsearch(ES)作为NOSQL+搜索引擎的有机结合体,不仅有近实时的查询能力,还具有强大的聚合分析能力。因此在全文检索、日志分析、监控系统、数据分析等领域ES均有广泛应用。而完整的Elastic Stack体系(Elasticsearch、Logstash、Kibana、Beats),更是提供了数据采集、清洗、存储、可视化的整套解决方案。 预留一半内存给Lucene使用 毋庸置疑,内存对于 Elasticsearch 来说绝对是重要的,但还有一个内存消耗大户 —— Lucene。 more /data/elasticsearch/config/elasticsearch.yml cluster.name: sevfun_es_mall //es的集群名称 node.name: sevfun_es_mall3 //节点名 node.master: true //该节点是否有资格被选举成为master node.ingest: false node.data: true //该节点是否存储索引数据 http.enabled: true //是否使用http协议对外提供服务 http.cors.enabled: true http.cors.allow-origin: "*" path.data: /data/esdata //设置索引数据的存储路径 path.logs

Elasticsearch学习笔记

邮差的信 提交于 2020-08-11 09:37:32
许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。 直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。 后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。 第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。 据说,Shay 的妻子还在等着她的食谱搜索引擎…​ Elasticsearch是Java开发的基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

ES参数说明

元气小坏坏 提交于 2020-08-11 08:18:05
Elasticsearch(ES)作为NOSQL+搜索引擎的有机结合体,不仅有近实时的查询能力,还具有强大的聚合分析能力。因此在全文检索、日志分析、监控系统、数据分析等领域ES均有广泛应用。而完整的Elastic Stack体系(Elasticsearch、Logstash、Kibana、Beats),更是提供了数据采集、清洗、存储、可视化的整套解决方案。 预留一半内存给Lucene使用 毋庸置疑,内存对于 Elasticsearch 来说绝对是重要的,但还有一个内存消耗大户 —— Lucene。 more /data/elasticsearch/config/elasticsearch.yml cluster.name: sevfun_es_mall //es的集群名称 node.name: sevfun_es_mall3 //节点名 node.master: true //该节点是否有资格被选举成为master node.ingest: false node.data: true //该节点是否存储索引数据 http.enabled: true //是否使用http协议对外提供服务 http.cors.enabled: true http.cors.allow-origin: "*" path.data: /data/esdata //设置索引数据的存储路径 path.logs

太牛皮啦!阿里P8架构师,呕心48小时整理的分布式系统技术和实战笔记

你离开我真会死。 提交于 2020-08-11 07:50:06
前言 现在的架构很多,各种各样的,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等,还有很多。 那什么是分布式系统?分布式系统是支持分布式处理的软件系统,是由通信网络互联的多处理机体系结构上执行任务的系统。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文件系统分布式数据库系统等,当然这些也是分布式的关键技术。 分布式需要了解的重点 1、ActivMQ 分布式消息总线 在大型分布式系统中,在遵循JMS规范的前提下 ,进行系统之间的大规模异步消息通信和集中常用的通信机制。 能对JMS规范有深入的了解,以及分布式系统架构中的异步通信机制。 2、高并发编程必备之NIO基础 NIO的基本原理以及实现过程 能对传统IO和NIO的区别进行系统的了解并能学会NIO的实现原理 3、Redis内存数据库 在大型分布式系统中,怎样在高并发的情况下解决某些非结构化数据快速存取的解决方案。 能对非关系数据库和非关系数据库有个系统的了解 以及Redis内存数据库的基本数据类型和各自的应用场景。 4、高并发编程之NIO流行框架之Netty NIO框架Netty的简介以及netty的应用场景。 能运用netty实现客户端和服务器端的基本通信。 5、Lucene

Elasticsearch系列---定制mapping

為{幸葍}努か 提交于 2020-08-11 00:49:21
概要 本篇接着前一篇内容,继续介绍mapping信息,重点倾向于自定义mapping、自定义对象以及数组集合类的底层结构。 自定义mapping 上一篇文章介绍的都是Elasticsearch的自动mapping,我们在创建索引时,可以先指定好mapping的信息,还是以music索引为例: PUT /music { "mappings": { "children": { "properties": { "content": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "language": { "type": "keyword" }, "length": { "type": "long" }, "likes": { "type": "long" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } } 共包含name,content,language,length,likes 5个field,这里我们把language field的type指定为keyword,这个field无需分词

Docker部署ElasticSearch以及使用

做~自己de王妃 提交于 2020-08-10 21:13:39
ElasticSearch笔记 1. ElasticSearch前期 1.1 聊聊ElasticSearch的简介 ​ Elaticsearch,简称为es, es是一个开源的 高扩展的分布式全文检索引擎 ,它可以近乎实时的 存储 、 检索 数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。 ​ 据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。 ElasticSearch的小故事 ​ 多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜 索功能。他发布了他的第一个开源项目,叫做“Compass”。 ​ 后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时 的、分布式的搜索引擎也是理所当然需要的