ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析


这篇文章主要介绍了ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析文章都会有所收获,下面我们一起来看看吧。ElasticSearch是非常重要的检索工具,利用分词、索引(倒排索引)、分词从众多检索工具中脱颖而出。ElasticSearch是面向文档的,文档是所有可搜索数据的最小单位日志文件中的日志项一本电影的具体信息 / 一张唱片的详细信息Mp3播放器的一首歌 / 一篇PDF文档中的具体内容文档会被序列化成Josn格式,保存在ElasticSearch中Json对象由字段组成每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)每个文档都有一个UniqueID你可以自己指定ID或者通过ElasticSearch自动生成一篇文档包含了一系列的字段Json文档,格式灵活,不需要预先定义格式字段的类型可以指定或通过ElasticSearch自动推算支持数组、支持嵌套元数据,用于标注文档的相关信息_index : 文档所属的索引名_type : 文档所属的类型名_id : 文档唯一ID_source : 文档的原始Json数据_version : 文档的版本信息_score : 相关性打分index :索引是文档的容器,是一类文档的结合index体现了逻辑空间的概念,每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型Shard 体现了物理空间的概念,索引中的数据分散在Shard上索引的Mapping与SettingsM免费云主机域名apping定义文档的字段类型Setting定义不同的数据分布高可用性服务可用性 :允许有节点停止服务数据可用性 :部分节点丢失,不会丢失数据可扩展性请求量提升 / 数据的不断增长(将数据分布都所有接点上)elasticsearch的分布式架构的好处存储的水平扩容提高系统的可用性,部分节点停止服务,整个集群的服务不受影响elasticsearch的分布式架构不同的集群通过不同的名字来区分,默认名字”elasticsearch”通过配置文件修改,或者在命令行中-E cluster.name=stark进行设定一个集群可以有一个或多个节点节点是elasticsearch的实例本质上就是一个Java进程一台机器上可以运行多个elasticsearch进程,但是生产环境一般建议一台机器上只运行一个elasticsearch实例每一个节点都有名字,通过配置文件配置,或者启动的时候-E node.name=node1指定每一个节点在启动之后,会分配一个UID,保存在data目录下主分片,用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上一个分片是一个运行的Lucene的实例主分片数在索引创建时指定,后续不允许修改,除非Reindex副本 ,用以解决数据高可用的问题,分片是主分片的拷贝副本分片数,可以动态调整增加副本数,还可以在一定程度上提高服务的可用性Green – 主分片与副本都正常分配Yellow – 主分片全部正常分配,有副本分片未能正常分片Red – 有主分片未能分配1.使用PostMan创建一个名字叫stark的索引Type名,约定都用_docCreate ,如果ID已经存在,会失败Index ,如果ID不存在,创建新的文档。否则先删除现有文档,再创建新的文档,版本会增加。Update ,文档必须已经存在,更新只会对相应字段做增量修改。支持自动生成文档ID和指定文档ID两种方式:使用POST /indexName/_doc,系统会自动生成Document ID使用PUT /indexName/_create/ID创建时,URI中显示指定_create,此时如果该ID的文档已经存在,操作失败GET http://127.0.0.1:9200/IndexName/_doc/ID找到文档,返回Http 200文档元信息,同一个ID的文档,即使被删除,Version号也会不断增加_source 中默认包含了文档的所有原始信息找不到文档,返回Http 404Index和Create不一样的地方:如果文档存在,就索引新的文档。否则现有文档会被删除,新的文档被索引,版本信息(Version) + 1。Update方法不会删除原来的文档,而是实现真正的数据更新,POST方法 ,Payload需要包含在doc中。DELETE IndexName/_doc/IDBulk Api 支持在一次Api调用中,对不同的索引进行操作,支持四种类型操作,IndexCreateUpdateDelete。可以在URI中指定Index,也可以在请求的Payload中进行,操作单挑操作失败,并不影响其他操作,返回结果包括了每一条操作执行的结果。mGet批量操作,可以减少网络链接所产生的开销,提高性能。批量查询 msearch倒排索引的核心组成倒排索引包含两个部分倒排索引项文档ID词频TF – 该单词在文档中出现的次数,用于相关性评分位置,单词在文档中分词的位置,用于语句搜索偏移,记录单词的开始结束位置,实现高亮显示单词词典一般比较大,可以通过B+树或哈希拉链法实现,以满足高性能的插入和查询单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系倒排列表,记录了单词对应的文档结合,由倒排索引组成Es的倒排索引Es的Json文档中的每个字段,都有自己的倒排索引可以指定对某些字段不做索引优点:节省存储空间缺点:字段无法被搜索Analysis,文本分析是把全文本转换成一系列单词(term / token)的过程,也叫分词。Analysis 是通过 Analyzer 来实现的,可使用elasticsearch内置的分析器 / 或者按需定制化分析器。除了在数据写入时转换词条,匹配Query语句时候也需要用相同的分析器对查询进行查询语句进行分析。分词器是专门处理分词的组件,Analyzer由三部分组成:① 针对原始文本处理,例如去除html② 按照规则切分单词③ 将切分的单词进行加工,小写,删除stopworlds,增加同义词URI Search ,在URL中使用查询参数Request Body Search ,使用es提供的,基于Json格式的更加完备的Query Domain Specific Language(DSL)1.指定查询的索引集群上所有的索引:2.URI查询使用”q”,指定字符串查询”query string syntax”,KV键值对用q表示查询内容,搜索叫做stark的客户GET /IndexName/_search?q=keyName:stark3.Request BodyRequest Body 支持 POST/GET两种方法,-H代表的是header参数 -d 代表的是body的请求参数。4.搜索Response搜索Response有几个关键的描述需要在这里解释一下:took: 花费的时间total: 符合条件的总文档数hits:结果集,默认前10个文档_index:索引名_id:文档的ID_score: 相关度评分_source:文档原始信息q是关键字,df是指定字段,泛查询就是查询所有字段中包含关键字的结果Hello World 等效于 Hello Or World”Hello World”,等效于Hello AND World 。Phrase查询,还要求前后顺序保持一致分组和引号title:(Hello AND World)title = “Hello World”布尔操作必须大写title:(Hello NOT World)AND / OR / NOT 或者 && / || / !分组表示 must_not表示 must

title:(+Hello -World)URI Search支持范围查询和算术符号查询。范围查询区间表示:[]闭区间,{}开区间year:{2019 TO 2020}year:[* TO 2020]算数符号year:> 2020year:(>2010 && year:(+>2010 && +关于“ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: Golang如何实现一个不可复制类型

这篇文章主要讲解了“Golang如何实现一个不可复制类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang如何实现一个不可复制类型”吧!不考虑IDE提供的代码分析和go vet之类的静态分析工具,gol…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/03 11:57
下一篇 06/03 11:57

相关推荐