- 浏览: 150055 次
文章分类
最新评论
-
x_looking:
Client client = new TransportCl ...
ELASTICSEARCH常见问题 -
辣de冷wmyes:
ElasticSearch视频教程百度网盘地址:http:// ...
一、Elasticsearch安装使用教程
Mapping,就是对索引库中索引的字段名及其数据类型进行定义,类似于关系数据库中表建立时要定义字段名及其数据类型那样,不过es的mapping比数据库灵活很多,它可以动态添加字段。一般不需要要指定mapping都可以,因为es会自动根据数据格式定义它的类型,如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储等),就必须手动添加mapping。有两种添加mapping的方法,一种是定义在配置文件中,一种是运行时手动提交mapping,两种选一种就行了。
注意:
1、相当于数据库的表结构的定义,elasticsearch的mapping 也很重要。直接关系到性能及搜索结果的准确性。
2、elasticsearch的field一旦定义后就无法修改,增删改字段的话。从头定义表和建索引
先介绍在配置文件中定义mapping,你可以把[mapping名].json文件放到config/mappings/[索引名]目录下,这个目录要自己创建,一个mapping和一个索引对应,你也可以定义一个默认的mapping,把自己定义的default-mapping.json放到config目录下就行。json格式如下:
接下来介绍通过请求添加mapping,下面为一个添加productIndex索引库的mapping的json格式请求。其中productIndex为索引类型,properties下面的为索引里面的字段,type为数据类型,store为是否存储,”index”:”not_analyzed”为不对该字段进行分词。
{
"productIndex":{
"properties":{
"title":{
"type":"string",
"store":"yes"
},
"description":{
"type":"string",
"index":"not_analyzed"
},
"price":{
"type":"double"
},
"onSale":{
"type":"boolean"
},
"type":{
"type":"integer"
},
"createDate":{
"type":"date"
}
}
}
}
用java api调用的代码如下:
先创建空索引库
put mapping
讲完mapping的定义后,给个例子:
为了说明mapping的定义,我这里定义了一个简单的模型,就ID,type,和catIds 3个属性,重在说明如何使用java api来定义mapping,具体各field应该如何定义,这里不做讨论。
我们假设id就存储为long类型,type存储为字符串类型,catIds为一个列表,其实际类型为integer类型。定义的mapping如下:
注意:elasticsearch的field一旦定义后就无法修改,你想增加一个store属性,都不行。
下面就是调用JAVA API了,注意,在定义mapping之前,还需要先创建一个index库。这里,我index库和mapping 写到一个方法里面了。
Client client = ESUtils.getClient();
//首先创建索引库
CreateIndexResponse indexresponse = client.admin().indices()
//这个索引库的名称还必须不包含大写字母
.prepareCreate("testindex").execute().actionGet();
System.out.println(indexresponse.acknowledged());
//如果是在两台机器上,下面直接putMapping可能会报异常
PutMappingRequestBuilder builder = client.admin().indices().preparePutMapping("testindex");
//testType就像当于数据的table
builder.setType("testType");
XContentBuilder mapping = getMapping();
builder.setSource(mapping);
PutMappingResponse response = builder.execute().actionGet();
System.out.println(response.acknowledged());
其中,这个代码在我本机出现一点问题,当我创建完index后,直接创建mapping 的时候,报index missing。我把两个es Node停掉一个就没有问题了。可见,ES将create index和putMapping放到了两个不同的es Node下面,导致了上面那个异常。
好了,有时为了测试,可能需要删除某个索引,代码如下:
Client client = ESUtils.getClient();
client.admin().indices()
//这个索引库的名称还必须不包含大写字母
.prepareDelete("testindex").execute().actionGet();
注意:
1、相当于数据库的表结构的定义,elasticsearch的mapping 也很重要。直接关系到性能及搜索结果的准确性。
2、elasticsearch的field一旦定义后就无法修改,增删改字段的话。从头定义表和建索引
先介绍在配置文件中定义mapping,你可以把[mapping名].json文件放到config/mappings/[索引名]目录下,这个目录要自己创建,一个mapping和一个索引对应,你也可以定义一个默认的mapping,把自己定义的default-mapping.json放到config目录下就行。json格式如下:
{ "mappings":{ "properties":{ "title":{ "type":"string", "store":"yes" }, "description":{ "type":"string", "index":"not_analyzed" }, "price":{ "type":"double" }, "onSale":{ "type":"boolean" }, "type":{ "type":"integer" }, "createDate":{ "type":"date" } } } }
接下来介绍通过请求添加mapping,下面为一个添加productIndex索引库的mapping的json格式请求。其中productIndex为索引类型,properties下面的为索引里面的字段,type为数据类型,store为是否存储,”index”:”not_analyzed”为不对该字段进行分词。
{
"productIndex":{
"properties":{
"title":{
"type":"string",
"store":"yes"
},
"description":{
"type":"string",
"index":"not_analyzed"
},
"price":{
"type":"double"
},
"onSale":{
"type":"boolean"
},
"type":{
"type":"integer"
},
"createDate":{
"type":"date"
}
}
}
}
用java api调用的代码如下:
先创建空索引库
client.admin().indices().prepareCreate("productIndex").execute().actionGet();
put mapping
XContentBuilder mapping = jsonBuilder() .startObject() .startObject("productIndex") .startObject("properties") .startObject("title").field("type", "string").field("store", "yes").endObject() .startObject("description").field("type", "string").field("index", "not_analyzed").endObject() .startObject("price").field("type", "double").endObject() .startObject("onSale").field("type", "boolean").endObject() .startObject("type").field("type", "integer").endObject() .startObject("createDate").field("type", "date").endObject() .endObject() .endObject() .endObject(); PutMappingRequest mappingRequest = Requests.putMappingRequest("productIndex").type("productIndex").source(mapping); client.admin().indices().putMapping(mappingRequest).actionGet();
讲完mapping的定义后,给个例子:
为了说明mapping的定义,我这里定义了一个简单的模型,就ID,type,和catIds 3个属性,重在说明如何使用java api来定义mapping,具体各field应该如何定义,这里不做讨论。
public class TestModel implements Serializable { private static final long serialVersionUID = 3174577828007649745L; //主ID private long id; //类型,为types之一 private String type; /** * 这里是一个列表 */ private List<Integer> catIds; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getType() { return type; } public void setType(String type) { this.type = type; } public List<Integer> getCatIds() { return catIds; } public void setCatIds(List<Integer> catIds) { this.catIds = catIds; } }
我们假设id就存储为long类型,type存储为字符串类型,catIds为一个列表,其实际类型为integer类型。定义的mapping如下:
/** * mapping 一旦定义,之后就不能修改。 * @return * @throws Exception */ private static XContentBuilder getMapping() throws Exception{ XContentBuilder mapping = jsonBuilder() .startObject() .startObject("test") .startObject("properties") .startObject("id") .field("type", "long") .field("store", "yes") .endObject() .startObject("type") .field("type", "string") .field("index", "not_analyzed") .endObject() .startObject("catIds") .field("type", "integer") .endObject() .endObject() .endObject() .endObject(); return mapping; }
注意:elasticsearch的field一旦定义后就无法修改,你想增加一个store属性,都不行。
下面就是调用JAVA API了,注意,在定义mapping之前,还需要先创建一个index库。这里,我index库和mapping 写到一个方法里面了。
Client client = ESUtils.getClient();
//首先创建索引库
CreateIndexResponse indexresponse = client.admin().indices()
//这个索引库的名称还必须不包含大写字母
.prepareCreate("testindex").execute().actionGet();
System.out.println(indexresponse.acknowledged());
//如果是在两台机器上,下面直接putMapping可能会报异常
PutMappingRequestBuilder builder = client.admin().indices().preparePutMapping("testindex");
//testType就像当于数据的table
builder.setType("testType");
XContentBuilder mapping = getMapping();
builder.setSource(mapping);
PutMappingResponse response = builder.execute().actionGet();
System.out.println(response.acknowledged());
其中,这个代码在我本机出现一点问题,当我创建完index后,直接创建mapping 的时候,报index missing。我把两个es Node停掉一个就没有问题了。可见,ES将create index和putMapping放到了两个不同的es Node下面,导致了上面那个异常。
好了,有时为了测试,可能需要删除某个索引,代码如下:
Client client = ESUtils.getClient();
client.admin().indices()
//这个索引库的名称还必须不包含大写字母
.prepareDelete("testindex").execute().actionGet();
发表评论
-
使用 Scripted Metric Aggregation 遇到的问题
2016-02-19 14:12 2478使用Scripted Metric Aggregation进行 ... -
ElasticSearch性能优化策略
2016-02-17 19:42 3561ElasticSearch性能优化主要分为4个方面的优化。 一 ... -
Elasticsearch 数据建模 - 处理关联关系
2016-02-17 14:40 1077数据建模(Modeling Your Data ... -
数据类型转换错误
2016-02-15 18:28 1633异常: Invalid shift value (64) in ... -
elasticsearch 排序异常,关键字冲突
2016-02-03 12:35 5917org.elasticsearch.action.search ... -
ElasticSearch不同类型下同名字段排序错误
2016-02-03 11:18 1954虽然之前知道elasticsearch不同类型下同名字段要慎用 ... -
ElasticSearch immense term错误
2016-02-02 19:07 2682在使用ElasticSearch的过程中遇到了一个immens ... -
ELASTICSEARCH常见问题
2015-09-22 15:39 32231. ELASTICSEARCH建索引过程中崩溃问题追查 by ... -
routing实例1
2015-09-21 18:51 0package com.eg.part1; import j ... -
routing实例
2015-09-21 18:49 0创建索引: PUT /useraudit_v1 创建索引别名: ... -
elasticsearch 精确,模糊查询实例
2015-09-19 23:55 62625实例 http://www.bubuko.com/infode ... -
elasticsearch java调用实例
2015-09-19 23:55 3575http://outofmemory.cn/code-snip ... -
[维护]Elasticsearch零停机时间更新索引配置或迁移索引
2015-09-18 10:16 799另外一篇文章:http://blog.csdn.net/dm_ ... -
elasticsearch 的mapping定义
2015-09-18 10:16 1211elasticsearch 的mapping 例子一: 订单 ... -
ElasticSearch基础杂烩-配置-索引-优化
2015-09-19 23:56 643http://blog.csdn.net/huwei2003/ ... -
Elasticsearch安装中文分词插件ik
2015-09-18 10:15 2047安装步骤: 1、到github ... -
ElasticSearch的各种服务的URL
2015-09-18 10:15 546前言 elasticsearch 将各种功能、配置、服务都以A ... -
ElasticSearch集群搭建
2015-09-19 23:56 618http://www.linuxidc.com/Linux/2 ... -
elasticsearch 配置
2015-09-18 10:16 713elasticsearch.conf 主要是设置一些java运 ... -
elasticsearch中文分词集成
2015-09-17 09:35 614elasticsearch官方只提供smartcn这个中文分词 ...
相关推荐
这个基于Java注解的Elasticsearch mapping生成工具,旨在简化ES 5.2.0环境下的映射管理工作,通过注解方式提供强大的映射定义能力。它不仅提高了开发效率,还增强了代码的可读性和维护性。在实际项目中,这样的工具...
ElasticSearch映射生成器该工具允许在创建索引时为索引生成映射或设置。...使用注释描述定义的映射字段安装二进制文件部署在Maven Central上,您可以将工件导入到您的项目中: < dependency> < groupId>...
2. **创建索引**: 定义数据模型并创建对应的Elasticsearch索引。索引是Elasticsearch中的逻辑存储单元,类似于关系数据库中的表。 3. **序列化与反序列化**: 使用Nest库,对象会被自动转换为JSON格式,发送到...
7. **映射(Mapping)**:映射是Elasticsearch中的字段配置,定义了字段的数据类型、分析器等,影响着数据的索引和搜索行为。 8. **搜索性能**:Elasticsearch利用倒排索引技术,提供快速的全文检索。同时,通过...
2. 数据索引:创建合适的索引模板,定义映射(Mapping)以指定字段类型和分析器。 3. 分词器优化:选择适合的分词器,并可能需要自定义分词规则以满足特定需求。 4. 性能调优:监控集群性能,调整索引刷新频率、副本...
每个索引都有一个唯一的名称,并且可以设置相关的映射(Mapping)来定义字段的数据类型。 3. **文档(Document)**:索引中的基本单位,通常表示一种实体的信息,以JSON格式存储。 4. **类型(Type)**:在Elastic...
最后,`es`包可能是Elasticsearch相关的操作接口或抽象类,它们定义了与Elasticsearch交互的方法,如添加、更新、删除文档,以及查询等。例如: ```java public interface ElasticsearchRepository { void save...
- **类型(Type)**:在6.x版本后被文档映射(Mapping)取代,用于定义索引中每个字段的数据类型。 - **文档(Document)**:索引中的最小数据单元,以JSON格式存在。 - **分片(Shard)**:索引的逻辑部分,用于水平...
在Elasticsearch中,mapping是定义索引中字段的数据类型和属性的过程,它影响着数据如何被索引和搜索。通过自定义注解,开发者可以在实体类上直接声明字段的mapping,避免了手动编写JSON映射文件的繁琐工作。这使得...
4. **动态映射**: 当新类型的数据被索引时,Elasticsearch 可以自动创建映射(mapping),定义字段的数据类型,也可以手动配置。 5. **实时分析**: 数据一旦被索引,即可立即用于搜索和分析,无需等待批处理过程。 ...
6. **映射(Mapping)**:映射是Elasticsearch中定义字段数据类型的配置,它决定了数据如何被索引和搜索。5.6版本支持自动映射,但也可以自定义映射以满足特定需求。 7. **近实时处理(NRT)**:Elasticsearch具有...
- **映射(Mapping)**:定义字段的数据类型,有助于优化查询性能。 **2. Elasticsearch 的安装与配置** 安装 Elasticsearch 可通过下载官方二进制包,解压后配置 `elasticsearch.yml` 文件,包括设置路径、网络...
Elasticsearch是一个强大的开源搜索引擎,基于Java开发,其核心功能是全文检索,但同时也支持结构化数据、非结构化数据的检索。它以其高可扩展性、实时性、分布式处理能力以及灵活的数据模型赢得了广大用户的青睐。...
- **映射(Mapping)**:定义字段的数据类型和分析规则。 - **分片(Shard)**:索引被分成多个分片,可以分布在不同节点上,提高可伸缩性和性能。 - **副本(Replica)**:分片的备份,用于提高可用性和故障恢复。 2....
cp elasticsearch-analysis-ik-1.2.5.jar ES_HOME/plugins/analysis-ik/ ``` 同时,在 ElasticSearch 的配置文件 `elasticsearch.yml` 中添加以下内容来启用 ik 分词器: ```yaml index: analysis: analyzer: ik...
Elasticsearch 7.0 实例精解源代码是一份深度解析Elasticsearch 7.0版本核心功能和实际应用的资源集合。这份压缩包包含了详细的示例代码,旨在帮助开发者更好地理解和掌握Elasticsearch的强大功能。以下是基于...
**Elasticsearch** 是一个流行的开源全文搜索引擎,广泛应用于大数据分析、日志分析、实时搜索等领域。本参考资料基于《Elasticsearch 权威指南》的中文版,由原作者Clinton Gormley和Zachary Tong编著,旨在帮助...
- 创建索引:`PUT /index_name`,定义映射(mapping)来规范字段类型。 - 插入文档:`POST /index_name/_doc`,JSON格式表示数据。 - 查询索引:`GET /index_name/_search`,使用JSON构造查询条件。 5. **搜索...
**Elasticsearch权威指南概述** Elasticsearch是一个开源的全文搜索引擎,基于Lucene构建,设计用于分布式、实时的搜索和分析引擎。它不仅提供搜索功能,还支持数据分析、日志收集等多种用途。这本书《Elastic...