记录 Docker 集群部署 ES 7.x
三台机器 192.168.56.105 192.168.56.106 192.168.56.107 前置准备(防止 JVM 报错)12345sysctl -w vm.max_map_count=262144#只是测试,所以临时修改,永久修改使用下面echo vm.max_map_count=262144 >> /etc/sysctl.confsysctl -p es-node1 1234567891011121314151617181920212223242526272829# 集群名称,相同名称为一个集群cluster.name: elasticsearch-cluster# 节点名称,集群模式下每个节点名称唯一node.name: es-node1# 监听地址,用于访问该es,0.0.0.0代表不限制network.host: 0.0.0.0# 表示这个节点是否可以充当主节点node.master: true# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip)network.publish_host: ...
多索引组合查询
多索引组合查询(官方文档)如果不对某一特殊的索引做限制,就会搜索集群中的所有文档。Elasticsearch 转发搜索请求到每一个主分片或者副本分片,汇集查询出的前 10 个结果并返回。 经常的情况下,你想在一个或多个特殊的索引中进行搜索,可以通过在 URL 中指定特殊的索引和类型达到这种效果,如下所示: 路径 说明 /_search 在所有的索引中搜索所有的类型 /gb/_search 在 gb 索引中搜索所有的类型 /gb,us/_search 在 gb 和 us 索引中搜索所有的文档(明确指定多个索引名称,若索引不存在会出现错误) /g*,u*/_search 在任何以 g 或 u 开头的索引中搜索(通配符匹配,无需判断索引是否存在) /gb/user/_search 在 gb 索引中搜索 user 类型 /gb,us/user,tweet/_search 在 gb 和 us 索引中搜索 user 和 tweet 类型 /_all/user,tweet/_search 在所有的索引中搜索 user 和 tweet 类型 /index-...
ES 分享会:从倒排索引到生产实践
ES 分享一. 建立倒排索引的认识 倒排索引是一种索引方法,用来存储全文搜索下某个单词在文档中的位置映射。 以古诗问答为例来理解倒排索引: 问:说出带"前"字的古诗词 问:背一下李白的《静夜思》—— 窗前明月光,疑是地上霜 背诗的方式:按书中排列顺序,先记诗名再记内容 具象化到关系库模型: 在脑子中形成的索引是这样的: 建立了 name 的索引后,根据 name 找 content 就会很快(SELECT * FROM 古诗 WHERE name = '静夜思'),但反过来查包含某字的诗就变成全表扫描(SELECT name FROM 古诗 WHERE content LIKE '%前%')。 如果以"前"字作为索引,则可以解决这个问题: 但整首 20 字的古诗每个字都适合做索引,光唐诗就有 5 万多首,全部建索引不现实。由于已经可以通过诗名回忆整首诗,所以只需索引到诗名即可: 多首诗的情况: 以上就是倒排索引的入门讲解。 补充: ES 默认对全部字段建立索引,如古诗表中 ...
Elasticsearch 基本使用
1. 了解 ES1.1.1. Elasticsearch 的作用elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 1.1.2. ELK 技术栈elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域: 而elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 1.1.3. Elasticsearch 与 Luceneelasticsearch底层是基于lucene来实现的。 Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:https://lucene.apache.org/ 。 elasticsearch的发展历史: 2004年Shay Banon基于Lucene开发了Compass 2010年Shay Banon 重写了Compass,取名为Elasticsearch...
Elasticsearch DSL 使用指南
1. DSL 查询文档Elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1.1. DSL 查询分类Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如: ids range term 地理(geo)查询:根据经纬度查询。例如: geo_distance geo_bounding_box 复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如: bool function_score 查询的语法基本一致: 12345678GET /indexName/_search{ &...
ES 中的各种分词器
ES内置的Analyzer分析器es自带了许多内置的Analyzer分析器,无需配置就可以直接在index中使用: 标准分词器(standard):以单词边界切分字符串为terms,根据Unicode文本分割算法。它会移除大部分的标点符号,小写分词后的term,支持停用词。 简单分词器(simple):该分词器会在遇到非字母时切分字符串,小写所有的term。 空格分词器(whitespace):遇到空格字符时切分字符串, 停用词分词器(stop):类似简单分词器,同时支持移除停用词。 关键词分词器(keyword):无操作分词器,会输出与输入相同的内容作为一个single term。 模式分词器(pattern):使用正则表达式讲字符串且分为terms。支持小写字母和停用词。 语言分词器(language):支持许多基于特定语言的分词器,比如english或french。 签名分词器(fingerprint):是一个专家分词器,会产生一个签名,可以用于去重检测。 自定义分词器:如果内置分词器无法满足你的需求,可以自定义custom分词器,根据不同的character filte...
ES 自定义分析器与自动补全
自动补全当用户在搜索框输入字符时,应提示与该字符有关的搜索项,如图: 这种根据用户输入字母提示完整词条的功能,就是自动补全。因为需要根据拼音字母推断,所以需要用到拼音分词功能。 测试用法如下: 12345POST /_analyze{ "text": "如家酒店还不错", "analyzer": "pinyin"} 结果: 0. 自定义分词器默认的拼音分词器会将每个汉字单独分为拼音,而我们希望每个词条形成一组拼音,需要对拼音分词器进行个性化定制。 Elasticsearch 中分词器(analyzer)由三部分组成: character filters:在 tokenizer 之前对文本进行处理,例如删除字符、替换字符 tokenizer:将文本按一定规则切割成词条(term),例如 keyword(不分词)、ik_smart [tokenizer] filter:对 tokenizer 输出的词条做进一步处理,例如大小写转换、同义词处理、拼音处理等 文...
ES 知识小结
基本概念 文档型存储的中间件,以 JSON 格式进行数据存储 支持对文档数据的增删改查,即 CRUD 操作 使用分片和复制技术,支持处理超大规模数据 基于 Java 编写,天然支持分布式,主副分片自动分配和复制 基于 Hash 模式进行分片路由 全文检索功能强大,字段自动建立倒排索引 适合用于搜索及日志存储场景,但写入数据并非实时可见,取决于 refresh_interval 参数的配置 集群核心概念 集群(cluster):由一个或多个节点组成,通过集群名称与其他集群区分。 节点(node):单个 Elasticsearch 实例,通常运行在一个隔离的容器或虚拟机中。 索引(index):一组文档的集合,类似关系型数据库中的"表"。 分片(shard):索引被拆分为多个分片,分布在不同节点上。ES 自动管理分片的分配和再平衡,用户无需关心细节。 副本(replica):主分片的完整拷贝。ES 默认为每个索引创建 5 个主分片,并为每个主分片创建 1 个副本。主分片和副本均可处理查询请求,但只有主分片能处理写入请求。副本可随时动态增减,额外副本能带来更大...
Elasticsearch 7.14+ 使用 _index_template 和 _component_template 替代 _template
组件模板和索引模板的应用先创建两个组件模板12345678910111213141516171819202122232425PUT _component_template/test1_template{ "template": { "mappings": { "properties": { "test1": { "type": "text" } } } }}PUT _component_template/test2_template{ "template": { "mappings": { "properties": { "test2"...
ES reindex 操作记录
什么时候需要重建索引以下情况需要执行 reindex: 索引的 mappings 发生变更 索引的 settings 发生变更 集群内或集群间需要做数据迁移 数据预处理使用 Ingest Pipeline 预处理1234567891011121314151617181920212223242526272829PUT _ingest/pipeline/split_xxx{ "processors": [ { "split": { "field": "xxx", "separator": "," }, { "set": { "field": "xxx", "value": "0" } ...
