重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Elasticsearch 索引的配置项主要分为静态配置属性和动态配置属性,静态配置属性是索引创建后不能修改,而动态配置属性则可以随时修改。
成都创新互联专注于昆山网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供昆山营销型网站建设,昆山网站制作、昆山网页设计、昆山网站官网定制、微信小程序开发服务,打造昆山网络公司原创品牌,更为您提供昆山网站排名全网营销落地服务。
索引设置
es 索引设置的 api 为 _settings,完整的示例如下:
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "1",
"refresh_interval": "60s",
"analysis": {
JAVA代码ES设置setting
打开APP
weixin_39533307
关注
JAVA代码ES设置setting_Elasticsearch(es)索引设置(settings)参数详解 原创
2021-02-24 03:00:19
weixin_39533307
码龄5年
关注
Elasticsearch 索引的配置项主要分为静态配置属性和动态配置属性,静态配置属性是索引创建后不能修改,而动态配置属性则可以随时修改。
索引设置
es 索引设置的 api 为 _settings,完整的示例如下:
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "1",
"refresh_interval": "60s",
"analysis": {
"filter": {
"tsconvert": {
"type": "stconvert",
"convert_type": "t2s",
"delimiter": ","
},
"synonym": {
"type": "synonym",
"synonyms_path": "analysis/synonyms.txt"
}
},
"analyzer": {
"ik_max_word_synonym": {
"filter": [
"synonym",
"tsconvert",
"standard",
"lowercase",
"stop"
],
"tokenizer": "ik_max_word"
},
"ik_smart_synonym": {
es 修改setting
打开APP
weixin_39533307
关注
JAVA代码ES设置setting_Elasticsearch(es)索引设置(settings)参数详解 原创
2021-02-24 03:00:19
weixin_39533307
码龄5年
关注
Elasticsearch 索引的配置项主要分为静态配置属性和动态配置属性,静态配置属性是索引创建后不能修改,而动态配置属性则可以随时修改。
索引设置
es 索引设置的 api 为 _settings,完整的示例如下:
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "1",
"refresh_interval": "60s",
"analysis": {
"filter": {
"tsconvert": {
"type": "stconvert",
"convert_type": "t2s",
"delimiter": ","
},
"synonym": {
"type": "synonym",
"synonyms_path": "analysis/synonyms.txt"
}
},
"analyzer": {
"ik_max_word_synonym": {
"filter": [
"synonym",
"tsconvert",
"standard",
"lowercase",
"stop"
],
"tokenizer": "ik_max_word"
},
"ik_smart_synonym": {
"filter": [
"synonym",
"standard",
"lowercase",
"stop"
],
"tokenizer": "ik_smart"
}
},
"mapping": {
"coerce": "false",
"ignore_malformed": "false"
},
"indexing": {
"slowlog": {
"threshold": {
"index": {
"warn": "2s",
"info": "1s"
固定属性
index.creation_date:顾名思义索引的创建时间戳。
index.uuid:索引的 uuid 信息。
index.version.created:索引的版本号。
索引静态配置
index.number_of_shards:索引的主分片数,默认值是 5。这个配置在索引创建后不能修改;在 es 层面,可以通过 es.index.max_number_of_shards 属性设置索引最大的分片数,默认为 1024。
index.codec:数据存储的压缩算法,默认值为 LZ4,可选择值还有 best_compression,它比 LZ4 可以获得更好的压缩比(即占据较小的磁盘空间,但存储性能比 LZ4 低)。
index.routing_partition_size:路由分区数,如果设置了该参数,其路由算法为:( hash(_routing) + hash(_id) % index.routing_parttion_size ) % number_of_shards。如果该值不设置,则路由算法为 hash(_routing) % number_of_shardings,_routing 默认值为 _id。静态配置里,有重要的部分是配置分析器(config analyzers)。
index.analysis:分析器最外层的配置项,内部主要分为 char_filter、tokenizer、filter 和analyzer。
char_filter:定义新的字符过滤器件。
tokenizer:定义新的分词器。
filter:定义新的 token filter,如同义词 filter。
analyzer:配置新的分析器,一般是char_filter、tokenizer 和一些 token filter 的组合。
索引动态配置
index.number_of_replicas:索引主分片的副本数,默认值是 1,该值必须大于等于 0,这个配置可以随时修改。
index.refresh_interval:执行新索引数据的刷新操作频率,该操作使对索引的最新更改对搜索可见,默认为 1s。也可以设置为 -1 以禁用刷新。更详细信息参考 Elasticsearch 动态修改 refresh_interval 刷新间隔设置。
建议提前检查,为yellow直接提醒运维去维护为green。不过我这边用的es6.2.3yellow是正常查询的。建议你检查一下环境配置应该不是yellow的问题。试了一下;为red都可以正常查询的(java代码查询结果和下图es-head查询结果一致)
下面介绍一下如何使用Idea连接TFS服务器,并提交变更的代码到TFS服务器。
一、连接TFS服务器,并下载代码
Figure 1
Figure 2
Figure 3 - 输入TFS服务器的地址,例如:
Figure 4 - 选择服务器代码库地址和本地地址
Figure 5 - 代码下载中
Figure 6 - 选择创建项目
Figure 7
Figure 8 - 继续, 后面几项都是Idea导入代码的界面,省略截屏
Figure 9 - 打开的项目
,代码主要逻辑如下:
// 读取要导入数据的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 开启批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex("test", "all")
.setSource(json));
// 每一千条提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
System.out.println("提交了:" + count);
}
count++;
}
bulkRequest.execute().actionGet();
System.out.println("插入完毕");
br.close();
登录后复制

运行后发现一个问题,我100多万条的数据,导入到es中怎么生成了1000多万条,而且还是在没有完全导入的情况下
然后用小批量数据导入到es,再把这些数据导出来,发现有好多重复的数据
为什么会重复呢,原因是在每一千条提交一次代码这块,第一次一千条提交了,并没有把bulkRequest置空,所以第二次提交的时候,会提交两千条,包括第一次已经提交的一千条,然后我们自己也没有设置_id,所以es会自动给数据生成一个_id,即使是重复的数据,搞清楚了原因,下面来说解决方法,主要有两种:
第一种就是在提交了一千条后,对bulkRequest进行重置,因为bulkRequest并没有重置的方法,所以可以新建一个bulkRequest,类似于重置,具体代码如下:
// 读取要导入数据的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 开启批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex("test", "all")
.setSource(json));
// 每一千条提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
//此处新建一个bulkRequest,类似于重置效果
bulkRequest = client.prepareBulk();
System.out.println("提交了:" + count);
}
count++;
}
bulkRequest.execute().actionGet();
System.out.println("插入完毕");
br.close();
登录后复制

第二种就是自己设置_id,确保每一条数据只有一个_id,这样的话,即使数据重复了,因为_id是一样的,所以es会进行更新,这样的话并没有从根源上解决数据重复的问题,只是重复数据会更新,这样的话效率会慢,具体代码如下:
// 读取要导入数据的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 开启批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
//设置_id为count
bulkRequest.add(client.prepareIndex("test", "all",
String.valueOf(count)).setSource(json));
// 每一千条提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
//此处新建一个bulkRequest,类似于重置效果
System.out.println("提交了:" + count);
}
count++;
}
bulkRequest.execute().actionGet();
System.out.println("插入完毕");
br.close();
登录后复制

建议使用第一种方法,效率会快很多。