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"...
Elasticsearch 大小写查询完全指南:Normalizer 的正确使用
概述Elasticsearch 中不同字段类型对大小写的处理方式不同。text 类型默认不区分大小写,而 keyword 类型默认区分大小写。通过 normalizer 可以实现 keyword 类型的大小写不敏感查询。 核心内容: 🔤 分词器大小写处理机制 🔑 Keyword 类型的局限性 ⚙️ Normalizer 原理和使用 📊 实战案例演示 适用场景: 需要精确匹配但忽略大小写 聚合查询时统一大小写 城市、国家等枚举值查询 默认行为Standard 分词器(Text 类型)特点: 默认不区分大小写 处理机制: 存储时:大写字符 → 自动转换为小写;查询时:自动转换为小写匹配。 示例: 123456789101112131415161718192021222324252627282930313233343536// 索引创建PUT /products{ "mappings": { "properties": { "name": { ...
ES 自定义分析器与自动补全
自动补全当用户在搜索框输入字符时,应提示与该字符有关的搜索项,如图: 这种根据用户输入字母提示完整词条的功能,就是自动补全。因为需要根据拼音字母推断,所以需要用到拼音分词功能。 测试用法如下: 12345POST /_analyze{ "text": "如家酒店还不错", "analyzer": "pinyin"} 结果: 0. 自定义分词器默认的拼音分词器会将每个汉字单独分为拼音,而我们希望每个词条形成一组拼音,需要对拼音分词器进行个性化定制。 Elasticsearch 中分词器(analyzer)由三部分组成: character filters:在 tokenizer 之前对文本进行处理,例如删除字符、替换字符 tokenizer:将文本按一定规则切割成词条(term),例如 keyword(不分词)、ik_smart [tokenizer] filter:对 tokenizer 输出的词条做进一步处理,例如大小写转换、同义词处理、拼音处理等 文...
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...
IK 分词器自定义词库热更新
官方热更新 IK 分词使用方法目前该插件支持热更新 IK 分词,通过上文在 IK 配置文件中提到的如下配置 1234 <!--用户可以在这里配置远程扩展字典 --><entry key="remote_ext_dict">location</entry> <!--用户可以在这里配置远程扩展停止词字典--><entry key="remote_ext_stopwords">location</entry> 其中 location 是指一个 url,比如 http://yoursite.com/getCustomDict,该请求只需满足以下两点即可完成分词热更新。 该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。 该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。 满足上面两点要求就可以实现热更新分词了,不需要重...
ES 中文拼音混合搜索
1. 使用场景介绍搜索功能支持拼音检索、中文检索、拼音中文混合检索。 例如,输入 l德h: 期望结果:刘德华、刘德华4 不期望结果:刘得华、刘的华 2. 下载 pinyin 插件github地址注意:下载的版本需与自己的 ES 版本一致。 3. 修改插件源码及安装注意事项: v7.13.1 已原生支持拼音中文混合检索,可直接安装使用。 v7.9.3 及以下版本需手动修改源码,步骤如下: 下载 v7.9.3 和 v7.13.1 两份源码 通过 compare 对比,将 v7.13.1 中新增的代码合入 v7.9.3 修改 pom.xml 中的 elasticsearch.version 为 7.9.3 执行 mvn clean package 打包 将生成的 elasticsearch-analysis-pinyin-7.9.3.zip 解压到 plugins/analysis-pinyin 目录下 4. 测试创建索引123456789101112131415161718192021222324252627282930313233343536373839########...
minimum_should_match 最低匹配度详解
minimum_should_match 顾名思义:最低匹配度,即 should 子句在倒排索引中最低的匹配个数。 1. minimum_should_match 的使用1.1 数据准备1234567891011121314151617181920212223242526# 创建索引PUT test_match# 创建映射PUT test_match/_mapping{ "properties":{ "price":{ "type":"double" }, "name":{ "type":"text" } }}# 批量导入数据PUT _bulk{"create":{"_index":"test_match","_type&q...
多索引组合查询
多索引组合查询(官方文档)如果不对某一特殊的索引做限制,就会搜索集群中的所有文档。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-...
分词搜索需求整理
背景 项目使用nodejs开发 数据使用nodejieba+pinyin进行分词处理 现需要将这里的逻辑放到es处理 目标 搜索框搜索的内容包含了三个字段: 品牌, 主机厂, 车型, 用于搜索的search_key字段使用${品牌} ${主机厂} ${车型}格式存储数据 全中文关键词查询: 一汽奥迪 -> 奥迪 一汽大众(奥迪) 100 全英文(拼音)或者英文(拼音)加数字: cg k1 -> 成功 成功汽车 K1 中文带英文(拼音)或者数字: 福特进口 bir -> 福特 福特(进口) Thunderbird [雷鸟] 安装分词器(ik,pinyin) 参考站内es中的各种分词器 配置字典表及热更新 参考站内ik分词器自定义词库热更新 keyword.dic 123恒润荣放... 索引配置创建索引配置如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950...
ES reindex 操作记录
什么时候需要重建索引以下情况需要执行 reindex: 索引的 mappings 发生变更 索引的 settings 发生变更 集群内或集群间需要做数据迁移 数据预处理使用 Ingest Pipeline 预处理1234567891011121314151617181920212223242526272829PUT _ingest/pipeline/split_xxx{ "processors": [ { "split": { "field": "xxx", "separator": "," }, { "set": { "field": "xxx", "value": "0" } ...
