【Elasticsearch】初始化默认字段及分词

1、添加分词插件

1)在线安装

执行命令

需要指定相同的版本

bin/elasticsearch-plugin.bat install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.24

2)离线安装

将安装包解压到 /plugins 目录下

安装包可以从对应的资源处下载

启动成功后可以看到已经加载的插件

2、补充分词字典

将analysis-ik_config.zip 解压到 plugins\analysis-ik 目录下

压缩文件见附件资源。

3、创建自定义索引库

PUT 请求  http://127.0.0.1:9200/my_index_name

{"mappings": {"date_detection": false,"numeric_detection": false,"properties": {"CAT_NO": {"fields": {"keyword": {"type": "keyword"}},"type": "text"},"VOL_NO": {"fields": {"keyword": {"type": "keyword"}},"type": "text"},"content": {"type": "wildcard"},"content_file": {"type": "text"},"content_vt": {"type": "wildcard"}}},"settings": {"analysis": {"analyzer": {"default": {"type": "ik_max_word"}}},"index": {"max_result_window": 100000000,"number_of_replicas": 1,"number_of_shards": 1}}
}

以上参数配置含义如下:

1. mappings 部分

mappings 用于定义文档中字段的类型和如何处理这些字段的配置。

1.1 date_detection: false
  • 作用:设置为 false 表示 Elasticsearch 不会自动将符合日期格式的字段解析为 date 类型。
  • 解释:有时候字符串字段可能看起来像日期,但其实不希望它们被自动识别为日期,设置 false 可以避免这种情况。
1.2 numeric_detection: false
  • 作用:设置为 false 表示 Elasticsearch 不会自动将符合数值格式的字段解析为 numeric 类型(如 integerdouble 等)。
  • 解释:如果有些数字其实是文本形式,不希望被自动检测为数字类型,这个配置可以避免这种转换。
1.3 properties

properties 中定义了各个字段的类型及其处理方式。

以下是业务自定义字段设置

  • CAT_NOVOL_NO 字段
    • type: text:表示该字段的数据是文本类型,适合分词和全文检索。
    • fields.keyword
      • type: keyword:在 text 字段的基础上增加了 keyword 字段,keyword 是不分词的,适合用于精确匹配(如过滤、聚合、排序等操作)。
  • contentcontent_vt 字段
    • type: wildcard 类型用于支持高效的通配符搜索。这是 Elasticsearch 7.9 引入的一种特殊数据类型,专门用于处理含有通配符查询的字段,适合快速的模式匹配搜索。
  • content_file 字段
    • type: text:文本类型字段,适合分词和全文搜索。

2. settings 部分

settings 定义了索引的行为配置,包括分析器和索引分片等设置。

2.1 analysis

analysis 定义了如何对文本进行分析处理,特别是配置了自定义的分词器。

  • analyzer.default:
    • type: ik_max_word:使用了 IK 分词器中的 ik_max_word 模式。
      • ik_max_word:是一种中文分词模式,它会将文本尽可能切分为最多的词语,适合用于最大化覆盖搜索词的场景。
2.2 index
  • max_result_window: 100000000

    • 作用:表示 Elasticsearch 允许的最大分页窗口。
    • 解释:默认情况下,Elasticsearch 的分页窗口大小(from + size)限制为 10,000 个结果。通过设置 max_result_window,可以增加这个限制到 100,000,000,这样可以处理大量数据的分页查询。不过,较大的窗口可能会增加内存消耗。
  • number_of_replicas: 1

    • 作用:表示索引的副本数,1 表示每个分片会有一个副本。
    • 解释:副本可以提高查询性能,并提供容错能力,如果某个分片宕机,副本可以替代原分片。
  • number_of_shards: 1

    • 作用:表示索引的主分片数,1 表示索引只会被划分为一个主分片。
    • 解释:分片是 Elasticsearch 的水平扩展方式。对于小数据集,1 个分片可以节省资源。如果数据量增长,可以重新索引并增加分片。

4、使用Java代码创建索引库

 
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.xcontent.XContentType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;
import java.util.Map;
import java.util.regex.Pattern;public class ElasticSearchClient {private RestHighLevelClient client;private static Logger logger = LoggerFactory.getLogger(ElasticSearchClient.class);private String indexdb;@SuppressWarnings("deprecation")public ElasticSearchClient() {String address = PropertyUtils.getProperty("indexServer");Integer port = Integer.parseInt(PropertyUtils.getProperty("serverPort"));String indexClusterName = PropertyUtils.getProperty("cluster");String userName = PropertyUtils.getProperty("es_user");String password = PropertyUtils.getProperty("es_pwd");final BasicCredentialsProvider credential = new BasicCredentialsProvider();// 配置身份验证credential.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));// 该方法接收一个RequestConfig.Builder对象,对该对象进行修改后然后返回。// 连接超时(默认为1秒)// 套接字超时(默认为30秒)//更改客户端的超时限制默认30秒现在改为100*1000分钟client = new RestHighLevelClient(RestClient.builder(new HttpHost(address, port, "http")).setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {@Overridepublic RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {return requestConfigBuilder.setConnectTimeout(50 * 1000).setSocketTimeout(60 * 1000);}}).setHttpClientConfigCallback(httpClientBuilder -> {// 设置 keep-alive 策略return httpClientBuilder.setDefaultCredentialsProvider(credential).setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE);}));this.indexdb = PropertyUtils.getProperty("indexdb");if (StringUtil.isBlank(indexdb)) {indexdb = "dams_index";}try {//client.putScript(putStoredScriptRequest, options);boolean exists =  existIndex(indexdb);if (!exists) {String script = DefProperties.getScript();System.out.println(script);createIndex(indexdb, script);}} catch (Exception e) {e.printStackTrace();}}/*** 1、创建索引** @param index* @throws IOException*/private boolean createIndex(String index, String source) throws IOException {CreateIndexRequest request = new CreateIndexRequest(index);request.source(source, XContentType.JSON);CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);// 检查响应是否成功if (response.isAcknowledged()) {System.out.println("索引创建成功!");} else {System.out.println("索引创建失败!");}return response.isAcknowledged();}/*** 测试索引是否存在** @throws IOException*/public boolean existIndex(String index) throws IOException {GetIndexRequest request = new GetIndexRequest(index);boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);return exists;}}

由于elasticseach内置代码中,需要将mappings中的所有对象转成Map数据类型,需要对原始的Json脚本参数进行调整, 添加 type 参数

{"mappings": {"type": {"date_detection": false,"numeric_detection": false,"properties": {"VOL_NO": {"fields": {"keyword": {"type": "keyword"}},"type": "text"},"content": {"type": "wildcard"},"content_file": {"type": "text"},"content_vt": {"type": "wildcard"}}}},"settings": {"analysis": {"analyzer": {"default": {"type": "ik_max_word"}}},"index": {"max_result_window": 100000000,"number_of_replicas": 1,"number_of_shards": 1}}
}

5、附录:全文检索配置文件

cluster.name: dams_cluster

network.host: 127.0.0.1
http.port: 9200

# 不开启geo数据库
ingest.geoip.downloader.enabled: false
 

# 设置访问账号密码
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: false 


##禁止机器学习
node.ml: false
xpack.ml.enabled: false

## 与es-sql 插件冲突,不启用
xpack.sql.enabled: false 

##性能优化
## 不使用内存交换
bootstrap.memory_lock: true

### 这个 fielddata 断路器限制fielddata的大小,默认情况下为堆大小的60%。
indices.breaker.fielddata.limit: 80%
### 这个 request 断路器估算完成查询的其他部分要求的结构的大小, 默认情况下限制它们到堆大小的40%。
indices.breaker.request.limit: 60%
### 这个 total 断路器封装了 request 和 fielddata 断路器去确保默认情况下这2个部分使用的总内存不超过堆大小的70%。
indices.breaker.total.limit: 80% 
### 配置fieldData的Cache大小,可以配百分比也可以配一个准确的数值。cache到达约定的内存大小时会自动清理,驱逐一部分FieldData数据以便容纳新数据。默认值为unbounded无限。 
indices.fielddata.cache.size: 90%
 

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

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

相关文章

云数据库 HBase

HBase 是一个分布式、可扩展的列式 NoSQL 数据库,源自 Google 的 Bigtable 论文,并是 Apache Hadoop 生态系统的一部分。它特别适用于需要处理大规模数据集的场景,尤其是那些要求高吞吐量和低延迟的数据访问。HBase 支持分布式存储&#xff0…

【爬虫】– 抓取原创力文档数据

使用RPA工具,实现针对于原创力中不可下载文档的抓取,可延用于其他类似文库 1 使用工具、环境 影刀RPA、WPS Office、谷歌浏览器(非指定) 2 代码流程 3 关键点 此方案只适合抓取非VIP即可预览全文的文档,抓取下来的数…

【burp】burpsuite基础(八)

Burp Suite基础(八) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 ip伪装 安装组件jython 下载好后,在burp中打开扩展…

输电线路故障测距研究

故障分析法容易受到过渡电阻、故障类型等因素的影响,从而造成测距误差较大。 行波法不受电力系统运行方式的影响,得到了广泛的应用。波头信息的提取方法主要有:小波变换、希尔伯特黄变换、TT变换等。 智能测距法逐渐被应用于输电线路故障测…

WEB安全 PHP学习

PHP基础 PHP编码显示问题 header ("Content-type: text/html; charsetgb2312"); header("Content-Type: text/html;charsetutf-8"); windows需要使用gbk编码显示 源码是 <?php header ("Content-type: text/html; charsetgb2312"); sys…

【配置查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

QT模型/视图结构:ListModel与TableModel

简介 模型/视图&#xff08;model/view&#xff09;结构是进行数据存储和界面展示的一种编程结构。此种方式将数据的存储与显示进行了解耦&#xff0c;视图组件显示模型中的数据&#xff0c;在视图组件里修改的数据会被自动保存到模型里。模型的数据来源可以是内存中的字符串列…

Linux系统 —— 进程系列 - 进程的概念,PCB与PID和fork

目录 1. 进程的基本概念与基本操作 1.1 总结&#xff1a;什么才是进程 2. 描述进程-PCB&#xff08;process control block&#xff09; 2.1 task_ struct 2.2 task_ struct内容分类 2.3 组织进程 3. PID 获取当前进程PID - getpid 获取父进程PID - getppid 如何查看…

模型训练数据-MinerU一款Pdf转Markdown软件

模型训练数据-MinerU一款Pdf转Markdown软件-说明 简介&#xff1a; MinerU是什么 MinerU是上海人工智能实验室OpenDataLab团队推出的开源智能数据提取工具&#xff0c;专注于复杂PDF文档的高效解析与提取。MinerU能将包含图片、公式、表格等元素的多模态PDF文档转化为易于分析…

第32天:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

时间轴&#xff1a; 32天主要学习内容&#xff1a; 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis java技术使用历史&#xff08;2023 &#xff09;&#xff1a; JavaEE-HTTP-Servlet&路由&周期: java学习范围&#xff1a; 3、Java: 功能:数据…

LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型 Matlab代码注释清晰。 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型&#xff08;Matlab&#…

D91【python 接口自动化学习】- pytest基础用法

day91 pytest的setup&#xff0c;setdown详解&#xff08;三&#xff09; 学习日期&#xff1a;20241207 学习目标&#xff1a;pytest基础用法 -- pytest的setup&#xff0c;setdown详解&#xff08;三&#xff09; 学习笔记&#xff1a; setup、teardown详解&#xff08;三…

Spring事务的一道面试题

每次聊起Spring事务&#xff0c;好像很熟悉&#xff0c;又好像很陌生。本篇通过一道面试题和一些实践&#xff0c;来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是&#xff1a;通过AOP切面的方式实现的&#xff0c;也就是通过代理模式去实现事务增强。 具体过程是&a…

【无标题】建议用坚果云直接同步zotero,其他方法已经过时,容易出现bug

created: 2024-12-06T16:07:45 (UTC 08:00) tags: [] source: https://zotero-chinese.com/user-guide/sync author: 数据与文件的同步 | Zotero 中文社区 Excerpt Zotero 中文社区&#xff0c;Zotero 中文维护小组&#xff0c;Zotero 插件&#xff0c;Zotero 中文 CSL 样式 数…

室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版)

目录&#xff1a; 0 引言 1 人形机器人对室内家政服务任务的结构化 1.1人形机器人在室内家政服务中的比较优势 1.1.1 人形机器人拟人性的7个维度 1.1.2 拟人性在室内家政服务工作中的比较优势 1.1.3 潜在的重要用户&#xff1a;宠物爱好者 1.2 居所室内环境的特征与结构…

基于stm23的智慧宿舍系统 (DAY10)_小程序

好久没记录开发进度了&#xff0c;今天小程序差不多开发完了&#xff0c;UI这块算是比较常见了&#xff0c;主要功能是能连接onenet查看设备上传的数据&#xff0c;同时也能对设备进行一些控制下面是几个主要的函数&#xff0c;功能比较简单 wx.request({url: ${apiBaseUrl}/t…

ruoyi-nbcio为安全起见actuator为仅暴露health端点

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

Vant UI +Golang(gin) 上传文件

前端基本用法&#xff1a;点击查看 实现代码&#xff1a; const afterRead (file) > {console.log(file);//set content-type to multipart/form-dataconst formData new FormData();formData.append("file", file.file);request.POST("/api/v1/users/up…

鸿蒙分享(一):添加模块,修改app名称图标

码仓库&#xff1a;https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12 新建公共模块common 在entry的oh-package.json5添加dependencies&#xff0c;引入common模块 "dependencies": {"common": "file:../common" } 修改app名称&…

图像处理网络中的模型水印

论文信息&#xff1a;Jie Zhang、Han Fang、Weiming Zhang、Wenbo Zhou、Hao Cui、Hao Cui、Nenghai Yu&#xff1a;Model Watermarking for Image Processing Networks 本文首次提出了图像处理网络中深度水印问题&#xff0c;将知识产权问题引入图像处理模型 提出了第一个深…