Elasticseach 基础

发布时间:2026/8/24 4:07:43
Elasticseach 基础 IK分词器是一款基于Java语言开发的、针对中文文本的开源分词工具包。它自2006年12月推出1.0版本以来已成为ElasticsearchES生态中最流行、最成熟的中文分词插件之一核心特性与价值IK分词器的核心价值在于它能将连续的中文句子切分为有意义的词语这是中文搜索引擎和信息检索的基础。其关键特性包括高处理性能具有高速的处理能力在普通PC环境下测试可达160万字/秒约3000KB/S。灵活的词典支持支持用户自定义词典并能通过配置文件IKAnalyzer.cfg.xml进行扩展。丰富的分词模式提供两种核心分词模式以适应不同场景。两种核心分词模式IK分词器提供两种模式用于平衡分词粒度与查询精度模式分词策略特点适用场景ik_max_word(细粒度)将文本进行最细粒度的拆分穷尽所有可能的词组合。分词结果多索引体积大能提高查全率Recall。术语查询Term Query需要尽可能匹配更多相关词汇时。ik_smart(智能/粗粒度)将文本进行粗粒度拆分倾向于分成“人类可读”的词语。分词结果少索引体积小能提高查准率Precision。短语查询Phrase Query追求更精确的搜索结果时。举例说明对文本“计算机汉字输入方法”进行分词两种模式的结果差异明显ik_max_word会拆分为计算机计算算机汉字输入汉字输入方法ik_smart会拆分为计算机汉字输入方法工作原理IK分词器主要基于词典匹配和规则进行分词。核心算法它综合运用正向最大匹配和逆向最大匹配两种算法。通过从词典中查找最长的词语进行匹配能有效处理分词歧义。内部机制其内部包含多个子分词器Segmenter协同工作例如处理中日韩文的CJKSegmenter、处理数量词的CN_QuantifierSegmenter和处理英文的LetterSegmenter。在Elasticsearch中的使用在Elasticsearch中IK分词器通常以插件elasticsearch-analysis-ik的形式安装和使用。版本匹配安装时必须确保IK插件的版本与Elasticsearch集群的版本完全一致。内置词典插件内置了丰富的词典文件例如包含27万多条中文词语的主词典main.dic和停用词词典stopword.dic。词典热更新支持词典的热更新即在不重启集群的情况下动态加载新的词典文件极大提升了运维效率。自定义词典IK分词器的一大优势是支持自定义词典你可以通过添加领域专有词汇来优化分词效果。自定义词典文件需为UTF-8编码的.dic文件且每行一个词。在 ext.dic 文件中写入 “白嫖 奥力给” 在 stopword.dic 文件中写入 “了 的” 一个词一行编码格式调整为 UTF-8 。然后测试此外IK分词器还支持拼音分词功能可将中文转换为拼音方便实现拼音搜索和排序。索引库操作1.核心数据类型这是最常用、最基础的类型用于处理常规数据。字符串类型String主要用于处理文本内容。text用于全文搜索。字段值会被分词器Analyzer处理拆分成独立的词项Term并建立倒排索引。适合处理如文章内容、商品描述等长文本。keyword用于精确值匹配。字段值不会被分词而是作为一个整体被索引。适合用于过滤Filtering、排序Sorting和聚合Aggregation操作例如状态码、标签、邮箱地址等。数值类型Numeric用于存储各种数值不同精度和范围对应不同类型。整数long(64位)、integer(32位)、short(16位)、byte(8位)。浮点数double(双精度64位)、float(单精度32位)。其他half_float(半精度)、scaled_float(缩放类型)、unsigned_long(无符号64位)。日期类型Date用于存储日期和时间。date支持多种格式的输入如2015-01-01或时间戳自1970-01-01以来的毫秒/秒数。存储时会被转换为UTC毫秒时间戳便于范围查询和排序。date_nanosdate类型的补充可存储纳秒级精度但可存储的日期范围更小。布尔类型Booleanboolean用于存储true或false值。对象类型Object默认的JSON对象类型。当你的字段是一个JSON对象时它会被自动映射为此类型其子字段可以通过properties属性定义。数组ArrayElasticsearch没有专门的数组类型。任何字段都可以包含一个或多个相同类型的值这即被视作数组。2.创建索引库PUT /suoyin { mappings: { properties: { info:{ type: text, analyzer: ik_smart }, email:{ type: keyword, index:false }, name:{ properties: { firstName:{ type:keyword }, lastName:{ type:keyword } } } } } }创建好之后再次请求会显示该索引已存在。3.查看、删除索引库GET /suoyin DELETE /suoyin4.索引库添加字段PUT /suoyin/_mapping { properties: { age: { type: integer } } }文档操作1.添加文档POST /suoyin/_doc/1 { info:Java程序员讲师, email:123456qq.com, name: { firstName:五郎, lastName:张 } }2.查看、删除文档3.修改文档# 全局修改文档 PUT /suoyin/_doc/1 { info:Java程序员讲师, email:Zhangwulangqq.com, name: { firstName:五郎, lastName:张 } } # 局部修改文档 POST /suoyin/_update/1 { doc:{ email:Zwulangqq.com } }