搜索引擎数据库
📖 内容
Elasticsearch
Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。
Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。
在 Elasticsearch 中,Mapping
(映射),用来定义一个文档以及其所包含的字段如何被存储和索引,可以在映射中事先定义字段的数据类型、字段的权重、分词器等属性,就如同在关系型数据库中创建数据表时会设置字段的类型。
Mapping 会把 JSON 文档映射成 Lucene 所需要的扁平格式
一个 Mapping 属于一个索引的 Type
Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。
Elastic 技术栈通常被用来作为日志采集、检索、可视化的解决方案。
ELK 是 elastic 公司旗下三款产品 Elasticsearch 、Logstash 、Kibana 的首字母组合。
Logstash 传输和处理你的日志、事务或其他数据。
Kibana 将 Elasticsearch 的数据分析并渲染为可视化的报表。
如果我们启动了一个单独的节点,里面不包含任何的数据和索引,那我们的集群看起来就是一个包含空内容节点的集群。
Figure 1. 包含空内容节点的集群
Elasticsearch 官方的 High Level REST Client 在 7.1.5.0 版本废弃。所以本文中的 API 不推荐使用。
在 pom.xml 中引入以下依赖:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.1</version>
</dependency>
文本分析是把全文本转换为一系列单词(term/token)的过程,也叫分词。在 Elasticsearch 中,分词是通过 analyzer(分析器)来完成的,不管是索引还是搜索,都需要使用 analyzer(分析器)。分析器,分为内置分析器和自定义的分析器。
分析器可以进一步细分为字符过滤器(Character Filters)、分词器(Tokenizer)和词元过滤器(Token Filters)三部分。它的执行顺序如下:
Elasticsearch 索引管理主要包括如何进行索引的创建、索引的删除、副本的更新、索引读写权限、索引别名的配置等等内容。
创建索引
创建名为 books 的索引:
PUT /books
Elasticsearch 的高亮(highlight)可以让您从搜索结果中的一个或多个字段中获取突出显示的摘要,以便向用户显示查询匹配的位置。当您请求突出显示(即高亮)时,响应结果的 highlight 字段中包括高亮的字段和高亮的片段。Elasticsearch 默认会用 <em></em>
标签标记关键字。
ES 提供了如下高亮参数:
参数 | 说明 |
---|---|
boundary_chars |
包含每个边界字符的字符串。默认为,! ?\ \ n。 |
boundary_max_scan |
扫描边界字符的距离。默认为 20。 |
boundary_scanner |
指定如何分割突出显示的片段,支持 chars、sentence、word 三种方式。 |
boundary_scanner_locale |
用来设置搜索和确定单词边界的本地化设置,此参数使用语言标记的形式(“en-US”, “fr-FR”, “ja-JP”) |
encoder |
表示代码段应该是 HTML 编码的:默认(无编码)还是 HTML (HTML-转义代码段文本,然后插入高亮标记) |
fields |
指定检索高亮显示的字段。可以使用通配符来指定字段。例如,可以指定 comment**来获取以 comment*开头的所有文本和关键字字段的高亮显示。 |
force_source |
根据源高亮显示。默认值为 false。 |
fragmenter |
指定文本应如何在突出显示片段中拆分:支持参数 simple 或者 span。 |
fragment_offset |
控制要开始突出显示的空白。仅在使用 fvh highlighter 时有效。 |
fragment_size |
字符中突出显示的片段的大小。默认为 100。 |
highlight_query |
突出显示搜索查询之外的其他查询的匹配项。这在使用重打分查询时特别有用,因为默认情况下高亮显示不会考虑这些问题。 |
matched_fields |
组合多个匹配结果以突出显示单个字段,对于使用不同方式分析同一字符串的多字段。所有的 matched_fields 必须将 term_vector 设置为 with_positions_offsets,但是只有将匹配项组合到的字段才会被加载,因此只有将 store 设置为 yes 才能使该字段受益。只适用于 fvh highlighter。 |
no_match_size |
如果没有要突出显示的匹配片段,则希望从字段开头返回的文本量。默认为 0(不返回任何内容)。 |
number_of_fragments |
返回的片段的最大数量。如果片段的数量设置为 0,则不会返回任何片段。相反,突出显示并返回整个字段内容。当需要突出显示短文本(如标题或地址),但不需要分段时,使用此配置非常方便。如果 number_of_fragments 为 0,则忽略 fragment_size。默认为 5。 |
order |
设置为 score 时,按分数对突出显示的片段进行排序。默认情况下,片段将按照它们在字段中出现的顺序输出(order:none)。将此选项设置为 score 将首先输出最相关的片段。每个高亮应用自己的逻辑来计算相关性得分。 |
phrase_limit |
控制文档中所考虑的匹配短语的数量。防止 fvh highlighter 分析太多的短语和消耗太多的内存。提高限制会增加查询时间并消耗更多内存。默认为 256。 |
pre_tags |
与 post_tags 一起使用,定义用于突出显示文本的 HTML 标记。默认情况下,突出显示的文本被包装在和标记中。指定为字符串数组。 |
post_tags |
与 pre_tags 一起使用,定义用于突出显示文本的 HTML 标记。默认情况下,突出显示的文本被包装在和标记中。指定为字符串数组。 |
require_field_match |
默认情况下,只突出显示包含查询匹配的字段。将 require_field_match 设置为 false 以突出显示所有字段。默认值为 true。 |
tags_schema |
设置为使用内置标记模式的样式。 |
type |
使用的高亮模式,可选项为**unified 、plain 或fvh **。默认为 unified 。 |
Elasticsearch 是当前流行的企业级搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。作为一个开箱即用的产品,在生产环境上线之后,我们其实不一定能确保其的性能和稳定性。如何根据实际情况提高服务的性能,其实有很多技巧。这章我们分享从实战经验中总结出来的 elasticsearch 性能优化,主要从硬件配置优化、索引优化设置、查询方面优化、数据结构优化、集群架构优化等方面讲解。
升级硬件设备配置一直都是提高服务能力最快速有效的手段,在系统层面能够影响应用性能的一般包括三个因素:CPU、内存和 IO,可以从这三方面进行 ES 的性能优化工作。