ES插件elasticsearch-analysis-pinyin和analysis-icu的区别

插件elasticsearch-analysis-pinyin和analysis-icu的区别:Elasticsearch中的两个插件elasticsearch-analysis-pinyinanalysis-icu都有助于文本分析和处理,但它们的功能和应用场景有所不同。以下是这两个插件的主要区别和用途:

1、elasticsearch-analysis-pinyin

功能:

  • 主要用于汉字拼音转换。
  • 适用于中文文本的拼音分析和搜索。
  • 提供了将汉字转换为拼音全拼和拼音首字母的功能。

应用场景:

  • 中文搜索优化。例如,通过拼音进行搜索或自动补全。
  • 支持汉字的拼音索引和查询。
  • 适合需要拼音匹配功能的应用场景,如拼音输入法、搜索建议等。

配置示例:

{"settings": {"analysis": {"analyzer": {"pinyin_analyzer": {"tokenizer": "my_pinyin"}},"tokenizer": {"my_pinyin": {"type": "pinyin","keep_first_letter": true,"keep_separate_first_letter": false,"keep_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"lowercase": true,"trim_whitespace": true}}}}
}

2、analysis-icu

功能:

  • 基于ICU(International Components for Unicode)库,提供高级的文本分析和处理功能。
  • 支持多语言和复杂的Unicode文本处理。
  • 包含ICU分词器(ICU Tokenizer)和ICU标准化过滤器(ICU Normalizer)。

应用场景:

  • 多语言文本分析,适用于处理各种语言的文本。
  • 支持Unicode标准化和处理复杂字符。
  • 提供高级的文本处理功能,如正则表达式替换、文本转换等。

配置示例:

{"settings": {"analysis": {"analyzer": {"icu_analyzer": {"tokenizer": "icu_tokenizer","filter": ["icu_normalizer"]}},"tokenizer": {"icu_tokenizer": {"type": "icu_tokenizer"}},"filter": {"icu_normalizer": {"type": "icu_normalizer","name": "nfc","mode": "compose"}}}}
}

3、主要区别

  • 用途不同

    • elasticsearch-analysis-pinyin专注于中文拼音转换和搜索优化。
    • analysis-icu提供了多语言支持和高级的Unicode文本处理能力。
  • 功能范围

    • elasticsearch-analysis-pinyin主要处理汉字到拼音的转换,适用于中文环境。
    • analysis-icu处理范围广泛,适用于多种语言和复杂的文本处理需求。
  • 配置方式

    • elasticsearch-analysis-pinyin需要特定的配置来处理拼音转换。
    • analysis-icu使用ICU分词器和标准化过滤器,适用于需要高级文本处理的场景。
  • 如何选择:
  • 如果你的主要需求是处理中文文本并需要拼音转换和匹配功能,选择elasticsearch-analysis-pinyin
  • 如果你需要处理多语言文本或需要高级的Unicode文本处理能力,选择analysis-icu

4、elasticsearch-analysis-pinyin 插件的业务场景

业务场景: 中文搜索优化,通过拼音进行搜索或自动补全。

Java代码示例:

假设我们有一个Java应用程序,需要使用elasticsearch-analysis-pinyin插件来处理中文拼音转换和搜索优化。以下是一个简单的示例,演示如何创建Elasticsearch索引,并使用自定义分析器进行拼音处理。

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.mapper.ObjectMapper;
import org.elasticsearch.index.mapper.ParseContext.Document;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class ElasticsearchPinyinExample {private static final String INDEX_NAME = "my_index";private static final String TYPE_NAME = "_doc";private static final String FIELD_NAME = "content";public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端连接RestHighLevelClient client = new RestHighLevelClient();try {// 创建索引请求CreateIndexRequest request = new CreateIndexRequest(INDEX_NAME);request.settings(Settings.builder().put("index.number_of_shards", 1).put("index.number_of_replicas", 0));// 创建自定义分析器,包括拼音转换器Map<String, Object> pinyinAnalyzer = new HashMap<>();pinyinAnalyzer.put("tokenizer", "my_pinyin");Map<String, Object> tokenizer = new HashMap<>();tokenizer.put("type", "pinyin");tokenizer.put("keep_first_letter", true);tokenizer.put("keep_separate_first_letter", false);tokenizer.put("keep_full_pinyin", true);tokenizer.put("keep_original", true);tokenizer.put("limit_first_letter_length", 16);tokenizer.put("lowercase", true);tokenizer.put("trim_whitespace", true);Map<String, Object> analysis = new HashMap<>();analysis.put("analyzer", pinyinAnalyzer);analysis.put("tokenizer", tokenizer);request.mapping(TYPE_NAME, new ObjectMapper().toSource());// 执行创建索引请求CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);// 准备文档数据Map<String, Object> document = new HashMap<>();document.put(FIELD_NAME, "你好,世界");// 创建文档请求IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME).source(document);// 执行文档创建请求IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);// 输出结果System.out.println("Indexed document ID: " + indexResponse.getId());} catch (IOException e) {e.printStackTrace();} finally {// 关闭客户端连接client.close();}}
}

5、analysis-icu 插件的业务场景

业务场景: 多语言文本处理和Unicode标准化。

Java代码示例:

下面是一个简单的示例,演示如何使用analysis-icu插件来处理多语言文本和Unicode标准化。

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class ElasticsearchIcuExample {private static final String INDEX_NAME = "my_index";private static final String TYPE_NAME = "_doc";private static final String FIELD_NAME = "content";public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端连接RestHighLevelClient client = new RestHighLevelClient();try {// 创建索引请求CreateIndexRequest request = new CreateIndexRequest(INDEX_NAME);request.settings(Settings.builder().put("index.number_of_shards", 1).put("index.number_of_replicas", 0));// 创建自定义分析器,包括ICU分词器和标准化过滤器Map<String, Object> icuAnalyzer = new HashMap<>();icuAnalyzer.put("tokenizer", "icu_tokenizer");icuAnalyzer.put("filter", "icu_normalizer");Map<String, Object> tokenizer = new HashMap<>();tokenizer.put("type", "icu_tokenizer");Map<String, Object> filter = new HashMap<>();filter.put("type", "icu_normalizer");filter.put("name", "nfc");filter.put("mode", "compose");Map<String, Object> analysis = new HashMap<>();analysis.put("analyzer", icuAnalyzer);analysis.put("tokenizer", tokenizer);analysis.put("filter", filter);request.mapping(TYPE_NAME, new ObjectMapper().toSource());// 执行创建索引请求CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);// 准备文档数据Map<String, Object> document = new HashMap<>();document.put(FIELD_NAME, "Hello, 世界");// 创建文档请求IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME).source(document);// 执行文档创建请求IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);// 输出结果System.out.println("Indexed document ID: " + indexResponse.getId());} catch (IOException e) {e.printStackTrace();} finally {// 关闭客户端连接client.close();}}
}

6、注意事项

  • 上述示例中的RestHighLevelClient类是Elasticsearch官方提供的Java高级客户端,用于与Elasticsearch进行交互。确保项目中包含正确的Elasticsearch Java客户端依赖。
  • 在实际应用中,根据具体需求和业务场景,可以调整和配置不同的分析器、标记器和过滤器,以达到最佳的文本处理效果。
  • 请根据实际情况替换示例中的索引名称、文档类型和字段名称,以及相应的配置参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2000年 - 2022年 Fama-French三因子模型数据+代码

Fama-French三因子模型是由著名经济学家尤金法玛&#xff08;Eugene Fama&#xff09;和肯尼斯法兰奇&#xff08;Kenneth French&#xff09;提出的&#xff0c;旨在改进资本资产定价模型&#xff08;CAPM&#xff09;&#xff0c;更全面地解释资产收益率的变化。该模型认为&a…

【动态规划】简单多状态dp问题

一、经验总结 在分析dp问题的状态表示时&#xff0c;发现当前阶段的状态可以继续细分为多个状态&#xff0c;且多个状态之间可以通过某种方式进行转换&#xff0c;这就是动态规划的多状态问题。 多状态问题的关键有以下几点&#xff1a; 找出dp问题的多个状态表示&#xff1a…

YOLOv8主干网络使用FasterNet替换

1 提出问题 减少GFLOPs就一定能提高模型的运行速度吗?一般人认为这个是理由应当的。但是在FasterNet文章中,作者告诉我们:不一定! 延迟与浮点数运算的关系如下: Latency=FLOPsFLOPS FLOPs:模型浮点数运算 FLOPS:每秒浮点数运算 这个你们在实验中可以得到验证,MobileN…

开源与在线 M3U8 Downloader 项目介绍及使用指南

M3U8 是一种用于播放列表格式的文件类型&#xff0c;广泛应用于流媒体服务中&#xff0c;特别是 HLS&#xff08;HTTP Live Streaming&#xff09;协议。它包含了一系列的 TS&#xff08;Transport Stream&#xff09;视频片段地址&#xff0c;使得视频能够分段加载&#xff0c…

【深度学习驱动流体力学】湍流仿真到深度学习湍流预测

目录 一、湍流项目结构二、三个OpenFOAM湍流算例1. motorBike背景和目的文件结构和关键文件使用和应用湍流仿真深度学习湍流预测深度学习湍流预测的挑战和应用结合湍流仿真与深度学习2. pitzDaily背景和目的文件结构和关键文件使用和应用3. pitzDailyMapped背景和目的文件结构和…

说说 golang 中的接口和反射

1、接口 1.1 类型 Golang 中的接口是一组方法的签名&#xff0c;是实现多态和反射的基础。 type 接口名 interface {method1(参数列表) 返回值列表method2(参数列表) 返回值列表 }不同于 Java 语言&#xff0c;使用 implements 关键字显示的实现接口。Golang 接口的实现都是…

【服务器06】之【如何不开外网连接GitHub】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 首先 如何在不开外网的条件下使用GitHub 第一步 下载安装Steam(Watt TooklKit) 区分一下如何查看哪个官网&#xff08;没有百度广告就是…

实时导航 C语言

实现实时导航的一种方法是使用C语言和一些外部库&#xff0c;如SDL&#xff08;Simple DirectMedia Layer&#xff09;来处理图形界面和输入&#xff0c;以及OpenGL进行图形渲染。以下是一个简单的例子&#xff0c;展示了如何使用C语言和SDL库来创建一个简单的实时导航应用。 …

Package libcudnn8 is not installed.的问题

ubantu20.04&#xff0c;cuda11.2安装cuda&#xff0c; cudann . 安装CUDNN时&#xff0c;如果选择 Deb安装方法&#xff0c; 有三个安装包要安装&#xff0c;必须先安装runtime版本&#xff0c;再安装developer版本&#xff0c;不然就会出现以下问题&#xff1a; dpkg: depe…

如何在Android中实现多线程与线程池?

目录 一、Android介绍二、什么是多线程三、什么是线程池四、如何在Android中实现多线程与线程池 一、Android介绍 Android是一种基于Linux内核的开源操作系统&#xff0c;由Google公司领导开发。它最初于2007年发布&#xff0c;旨在为移动设备提供一种统一、可扩展的操作系统。…

UltraEditUEStudio软件安装包下载及安装教程

​根据软件大数据显示提供预定义的或使用者创建的编辑“环境”&#xff0c;能记住 UltraEdit 的所有可停靠窗口、工具栏等的状态。实际上我们可以这样讲HTML 工具栏&#xff0c;对常用的 HTML 功能作了预配置;文件加密/解密;多字节和集成的 IME。根据使用者情况表明Git Editor&…

【Linux基础IO】磁盘的结构、文件系统与inode、软硬链接

目录 磁盘的物理存储结构 磁盘的逻辑结构 文件系统与inode 硬链接 软链接 关于目录文件 磁盘的物理存储结构 磁盘是计算机中唯一的机械硬件设备&#xff0c;由磁头&#xff0c;盘面&#xff0c;磁道&#xff0c;扇区这四部分对磁盘上的数据进行增删查改操作。盘面上存储的…

面向对象修炼手册(二)(消息与继承)(Java宝典)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;面向对象修炼手册 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 消息传递 1 基本概念 1.…

App推广告别邀请码,Xinstall助您一键触达海量用户!

在移动互联网高速发展的今天&#xff0c;App的推广与运营已成为每个开发者都必须面对的问题。然而&#xff0c;随着互联网流量的日益分散和用户需求的不断变化&#xff0c;传统的App推广方式已经难以满足现代市场的需求。尤其是在获取用户时&#xff0c;很多开发者还在采用传统…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-26网络中的网络NiN

26网络中的网络NiN import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个NiN块 def nin_block(in_channels, out_channels, kernel_size, strides, padding):return nn.Sequential(# 传统的卷积层nn.Conv2d(in_channels, ou…

图的学习.

目录 一、图的基本概念 1.1图的种类 1.2顶点的度、入度和出度 1.3边的权和网 1.4路径、路径长度和回路 二、图的存储结构 2.1邻接矩阵法 2.2邻接表法 2.3十字链表 2.4邻接多重表 三、图的遍历 3.1广度优先搜索 3.2深度优先搜索 四、图的应用 4.1最小生成树 4.1.…

VSCode 安装Remote-SSH

1、打开扩展商店安装Remote-SSH 快捷键&#xff1a;CtrlShiftX 2、配置ssh连接 打开命令面板&#xff08;CtrlShiftP&#xff09; 输入"Remote-SSH: Connect to Host"并选择。 输入你的Ubuntu服务器的IP地址或主机名。 3、连接到ubuntu服务器 如果是第一次连接&…

FPGA结构相关简介

一、芯片分类 ​FPGA属于数字芯片的一种&#xff0c;下面是根据世界半导体贸易统计协会WSTS的一个半导体分类&#xff0c;可以看到FPGA所属的类别。 二、FPGA的发展史 ​下图为FPGA的发展历史 三、FPGA的结构分类 下面是从三个角度进行划分 四、参考资料 《FPGA原理与结构》—…

【课程总结】Day10:卷积网络的基本组件

前言 由于接下来的课程内容将围绕计算机视觉展开&#xff0c;其中接触最多的内容是卷积、卷积神经网络等…因此&#xff0c;本篇内容将从卷积入手&#xff0c;梳理理解&#xff1a;卷积的意义、卷积在图像处理中的作用以及卷积神经网络的概念&#xff0c;最后利用pytorch搭建一…

1169 正方形

简单- 时间限制&#xff1a; 1000MS内存限制&#xff1a; 256MB分数&#xff1a;100OI排行榜得分&#xff1a;10(0.1*分数2*难度) 考点&#xff1a;选择结构 描述 有一个正方形&#xff0c;四个角的坐标分别是&#xff08;1&#xff0c;-1&#xff09;&#xff0c;&#xff…