es开源小工具 -- 分析器功能

es开源小工具 -- 分析器功能

    • [一. 前言](#一. 前言)
    • [二. 分词器知识点](#二. 分词器知识点)
      • [2.1 基本概念](#2.1 基本概念)
      • [2.2 分析器](#2.2 分析器)
    • [三. 项目的功能介绍及es使用](#三. 项目的功能介绍及es使用)
    • [四. 代码逻辑](#四. 代码逻辑)
      • [4.1 后端代码](#4.1 后端代码)
      • [4.2 前端代码](#4.2 前端代码)

前言

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱

一. 前言

今天我的es工具又添加了一个功能,最近做项目一直在研究分词器,为了方便日常开发调用,就添加了一个分词器功能。效果如下

好了,接下来说说怎么实现的吧。

已开源:完整代码连接 github 对你有帮助记得点赞收藏

二. 分词器知识点

2.1 基本概念

  1. 分词器(Analyzer):Elasticsearch 用于将文本分解成词项(tokens)的组件,是全文搜索的核心。
  2. 分词器是 索引和查询分析链 的一部分,包括:
    • 字符过滤器(char_filter):在分词前对原始文本做替换或去除特定字符。
    • 分词器(tokenizer):将文本切分成一个个 token。
    • 词项过滤器(token_filter):对 token 进行处理,如小写化、去停用词、同义词处理。
    • Elasticsearch 中 Analyzer = CharFilter + Tokenizer + TokenFilter

2.2 分析器

分析器有以下两类

  1. 索引时分析器(Index Analyzer):用于文档建立索引时分析文本。
  2. 查询时分析器(Search Analyzer):用于查询时对用户输入文本分析。

这两个可以不同,方便实现"索引精确,查询灵活"的策略。

内置标准分词器

  1. standard:默认分词器,适合英文,按空格和标点切词。
  2. simple:按非字母字符切分文本,小写化处理。
  3. whitespace:仅按空格分词,不做小写化。
  4. keyword:不做任何分词,将整个文本作为一个 token(适合精确匹配)。

其他分词器

  1. IK 分词器 (开源中文分词):ik_smart:智能模式,分词较粗 ik_max_word:最大化模式,尽可能切出所有词
  2. jieba 分词器 (中文分词)jieba_index:用于索引 jieba_search:用于搜索,粒度更细
  3. 其他语言插件 :如 mecab_ja(日文)、kuromoji(日文)、nori(韩文)等

三. 项目的功能介绍及es使用

  1. 查看已有的分词器列表
json 复制代码
{{url}}/_cat/plugins?v
  1. 使用分词器分词
json 复制代码
{{url}}/_analyze
{
  "analyzer": "jieba_index",
  "text": "程序智"
}

下面是我使用结巴分词器查询出来的结果

  1. 指定索引字段分词

指定字段和索引后,它不会在用你选择的分词器分词,而是使用title字段的分词器,在es中默认使用standard分词器

json 复制代码
{{url}}/test_cjk_standard/_analyze
{
  "field": "title",
  "text": "程序智"
}

四. 代码逻辑

完整代码连接 github 对你有帮助记得点赞收藏

4.1 后端代码

我是用的是8.11的依赖

xml 复制代码
       <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>8.11.4</version>
        </dependency>

主要代码

java 复制代码
   /**
     * 查看安装插件
     */
    public Object pluginsInfo(ElasticsearchClient client) throws IOException {
        return FastJsonUtils.convertToHashMapList(client.cat().plugins().valueBody());
    }
    /**
     * 分词器分词
     */
    public Object analyze(ElasticsearchClient client, String index, String analyzer, String text, String field) throws IOException {
        if (StringUtils.isBlank(index)) {
            return FastJsonUtils.convertToHashMapList(client.indices().analyze(a -> a.analyzer(analyzer).text(text)).tokens());
        }
        if (StringUtils.isNotBlank(field) && StringUtils.isNotBlank(index)) {
            return FastJsonUtils.convertToHashMapList(client.indices().analyze(a -> a.index(index).field(field).text(text)).tokens());
        }
        return FastJsonUtils.convertToHashMapList(client.indices().analyze(a -> a.index(index).analyzer(analyzer).text(text)).tokens());
    }

4.2 前端代码

html 复制代码
<template>
    <div>
        <!-- 输入文本框和选择分词器 -->
        <el-form :model="formData" label-width="80px">
            <div>
                <el-form-item label="索引名">
                    <el-input v-model="formData.indexName" placeholder="请输入索引名"></el-input>
                </el-form-item>
                <el-form-item label="字段">
                    <el-input v-model="formData.filed" placeholder="请输入字段名"></el-input>
                </el-form-item>
            </div>

            <el-form-item label="分词器">
                <el-select v-model="formData.analyzer" placeholder="请选择分词器">
                    <el-option v-for="(item, index) in analyzersMap" :key="index" :label="item" :value="item"></el-option>
                </el-select>
                <el-button type="text" size="small" @click="fetchAnalyzerOperations" style="margin-top: 10px;">
                    刷新分词器
                </el-button>
                <el-button type="text" size="small" @click="toggleAnalyzerList" style="margin-top: 10px; margin-left: 10px;">
                    {{ isAnalyzerListVisible ? '隐藏分词器列表' : '显示分词器列表' }}
                </el-button>
            </el-form-item>

            <!-- 分词器列表展示 -->
            <el-table v-if="isAnalyzerListVisible && analyzers.length > 0" :data="analyzers" style="width: 100%; margin-top: 20px;">
                <el-table-column label="组件" prop="component"></el-table-column>
                <el-table-column label="名称" prop="name"></el-table-column>
                <el-table-column label="版本" prop="version"></el-table-column>
            </el-table>

            <el-form-item label="文本">
                <el-input type="textarea" v-model="formData.document" placeholder="请输入文本" rows="4"></el-input>
            </el-form-item>

            <el-button type="primary" @click="analyzeText">分词</el-button>
        </el-form>

        <!-- 分词结果展示 -->
        <el-table :data="analysisResult" style="width: 100%" v-if="analysisResult.length > 0">
            <el-table-column label="分词结果">
                <template slot-scope="scope">
                    {{ scope.row }}
                </template>
            </el-table-column>
        </el-table>

        <!-- 错误信息展示 -->
        <el-alert v-if="errorMessage" type="error" :title="errorMessage"></el-alert>
    </div>
</template>

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接。

相关推荐
STLearner38 分钟前
AI论文速读 | U-Cast:学习高维时间序列预测的层次结构
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
数字化顾问40 分钟前
(65页PPT)大型集团物料主数据管理系统建设规划方案(附下载方式)
大数据·运维·人工智能
老蒋新思维2 小时前
创客匠人 2025 全球创始人 IP+AI 万人高峰论坛:AI 赋能下知识变现与 IP 变现的实践沉淀与行业启示
大数据·人工智能·网络协议·tcp/ip·重构·创始人ip·创客匠人
河南博为智能科技有限公司3 小时前
高集成度国产八串口联网服务器:工业级多设备联网解决方案
大数据·运维·服务器·数据库·人工智能·物联网
paopao_wu4 小时前
腾讯HunyuanOCR开源端到端OCR-1B:本地部署与测试
ai·开源·ocr·hunyuan
通义灵码4 小时前
Qoder 全形态产品家族正式发布,并开源 Agentic Coding 产品耐用度评测集
人工智能·开源·ai编程
无代码专家4 小时前
设备巡检数字化解决方案:构建高效闭环管理体系
java·大数据·人工智能
天远数科5 小时前
Node.js 原生加密指南:详解 Crypto 模块对接天远银行卡黑名单接口
大数据·api
expect7g5 小时前
Paimon Branch --- 流批一体化之二
大数据·后端·flink
天远云服5 小时前
高并发风控实践:AES 加密与银行卡风险标签清洗的 Go 语言实现
大数据·api