ElasticSearch(java) 创建索引

本文介绍了如何使用Elasticsearch Java API创建索引,包括四种生成JSON文档的方法:手写方式、使用集合、使用JACKSON序列化及使用ElasticSearch帮助类。并展示了通过Java API将JSON文档写入索引的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索]ElasticSearch Java Api(一) -创建索引

标签: elasticsearchapijavaes
 分类:
Elasticsearch(31) 
 

目录(?)[+]

 

ElasticSearch Java API官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html

一、生成JSON


创建索引的第一步是要把对象转换为JSON字符串.官网给出了四种创建JSON文档的方法:

1.1手写方式生成

String json = "{" +
        "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}";

手写方式很简单,但是要注意日期格式:Date Formate

1.2使用集合

集合是key:value数据类型,可以代表json结构.

Map<String, Object> json = new HashMap<String, Object>(); json.put("user","kimchy"); json.put("postDate",new Date()); json.put("message","trying out Elasticsearch");

1.3使用JACKSON序列化

ElasticSearch已经使用了jackson,可以直接使用它把javabean转为json.

// instance a json mapper
ObjectMapper mapper = new ObjectMapper(); // create once, reuse

// generate json
byte[] json = mapper.writeValueAsBytes(yourbeaninstance);

1.4使用ElasticSearch 帮助类

import static org.elasticsearch.common.xcontent.XContentFactory.*; XContentBuilder builder = jsonBuilder() .startObject() .field("user", "kimchy") .field("postDate", new Date()) .field("message", "trying out Elasticsearch") .endObject() String json = builder.string();

二、创建索引


下面的例子把json文档写入所以,索引库名为twitter、类型为tweet,id为1:

import static org.elasticsearch.common.xcontent.XContentFactory.*; IndexResponse response = client.prepareIndex("twitter", "tweet", "1") .setSource(jsonBuilder() .startObject() .field("user", "kimchy") .field("postDate", new Date()) .field("message", "trying out Elasticsearch") .endObject() ) .get();

也可以直接传人JSON字符串:

String json = "{" +
        "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; IndexResponse response = client.prepareIndex("twitter", "tweet") .setSource(json) .get();

可以调用response对象的方法获取返回信息:

// 索引名称
String _index = response.getIndex();
// 类型名称
String _type = response.getType();
// 文档id
String _id = response.getId();
// 版本(if it's the first time you index this document, you will get: 1) long _version = response.getVersion(); // 是否被创建is true if the document is a new one, false if it has been updated boolean created = response.isCreated();

更简单的可以直接System.out.println(response)查看返回信息.

三、java实现


新建一个Java项目,导入elasticsearch-2.3.3/lib目录下的jar文件.新建一个Blog类:

public class Blog {
    private Integer id;
    private String title;
    private String posttime; private String content; public Blog() { } public Blog(Integer id, String title, String posttime, String content) { this.id = id; this.title = title; this.posttime = posttime; this.content = content; } //setter and getter }

创建java实体类转json工具类:

import java.io.IOException;

import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; public class JsonUtil { // Java实体对象转json对象 public static String model2Json(Blog blog) { String jsonData = null; try { XContentBuilder jsonBuild = XContentFactory.jsonBuilder(); jsonBuild.startObject().field("id", blog.getId()).field("title", blog.getTitle()) .field("posttime", blog.getPosttime()).field("content",blog.getContent()).endObject(); jsonData = jsonBuild.string(); //System.out.println(jsonData); } catch (IOException e) { e.printStackTrace(); } return jsonData; } }

添加数据,返回一个list:

import java.util.ArrayList;
import java.util.Date; import java.util.List; public class DataFactory { public static DataFactory dataFactory = new DataFactory(); private DataFactory() { } public DataFactory getInstance() { return dataFactory; } public static List<String> getInitJsonData() { List<String> list = new ArrayList<String>(); String data1 = JsonUtil.model2Json(new Blog(1, "git简介", "2016-06-19", "SVN与Git最主要的区别...")); String data2 = JsonUtil.model2Json(new Blog(2, "Java中泛型的介绍与简单使用", "2016-06-19", "学习目标 掌握泛型的产生意义...")); String data3 = JsonUtil.model2Json(new Blog(3, "SQL基本操作", "2016-06-19", "基本操作:CRUD ...")); String data4 = JsonUtil.model2Json(new Blog(4, "Hibernate框架基础", "2016-06-19", "Hibernate框架基础...")); String data5 = JsonUtil.model2Json(new Blog(5, "Shell基本知识", "2016-06-19", "Shell是什么...")); list.add(data1); list.add(data2); list.add(data3); list.add(data4); list.add(data5); return list; } }

创建索引、添加数据:

import java.io.IOException;
import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Date; import java.util.List; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.xcontent.XContentBuilder; import cn.com.bropen.entity.DataFactory; import static org.elasticsearch.common.xcontent.XContentFactory.*; public class ElasticSearchHandler { public static void main(String[] args) { try { /* 创建客户端 */ // client startup Client client = TransportClient.builder().build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); List<String> jsonData = DataFactory.getInitJsonData(); for (int i = 0; i < jsonData.size(); i++) { IndexResponse response = client.prepareIndex("blog", "article").setSource(jsonData.get(i)).get(); if (response.isCreated()) { System.out.println("创建成功!"); } } client.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

查看插入的数据: 
这里写图片描述

2016.12.12 日更新

使用5.X版本的移步到这里:Elasticsearch 5.0下Java API使用指南

### 回答1: Elasticsearch是一个开源的搜索引擎,可以用于存储、搜索和分析大量数据。在Java创建Elasticsearch索引,可以通过以下步骤实现: 1. 安装Elasticsearch:首先需要安装Elasticsearch并启动它。可以从官方网站下载并按照说明进行安装。 2. 添加Elasticsearch依赖:在Java项目中添加Elasticsearch依赖,可以使用Maven或Gradle等构建工具。 3. 创建Elasticsearch客户端:使用Java API创建Elasticsearch客户端,连接到Elasticsearch服务器。 4. 创建索引:使用Java API创建索引,指定索引名称和映射。 5. 添加文档:使用Java API向索引中添加文档。 6. 搜索文档:使用Java API搜索索引中的文档。 以上是创建Elasticsearch索引的基本步骤,具体实现可以参考Elasticsearch官方文档和Java API文档。 ### 回答2: Elasticsearch是一个高度可伸缩的开源搜索和分析引擎,常用于构建实时数据集成和分析平台。在Elasticsearch中,索引是一个非常重要的概念。索引相当于数据库中的表,用于存储和管理数据。因此,创建索引Elasticsearch中的一个核心操作。 在Java中,通过Elasticsearch提供的Java API可以轻松地操作Elasticsearch。下面是一个简单的Java程序,用于创建一个名为“my_index”的索引,并定义一些字段。 ```java import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.mapper.ObjectMapper; import org.elasticsearch.index.mapper.ObjectMapper.Builder; import org.elasticsearch.index.mapper.ObjectMapper.BuilderContext; import org.elasticsearch.index.mapper.core.KeywordFieldMapper; import org.elasticsearch.index.mapper.core.LongFieldMapper; import org.elasticsearch.index.mapper.core.StringFieldMapper; import org.elasticsearch.index.mapper.object.RootObjectMapper; import java.io.IOException; import java.util.Collections; public class CreateIndex { public static void main(String[] args) throws IOException { RestHighLevelClient client = new RestHighLevelClient(); // Create an index CreateIndexRequest request = new CreateIndexRequest("my_index"); request.settings(Settings.builder() .put("index.number_of_shards", 3) .put("index.number_of_replicas", 2)); // Define a mapping for the index BuilderContext builderContext = new BuilderContext(new ObjectMapper()); Builder objectBuilder = new RootObjectMapper(builderContext); objectBuilder.add(new StringFieldMapper.Builder("title").build(null)); objectBuilder.add(new KeywordFieldMapper.Builder("author").build(null)); objectBuilder.add(new LongFieldMapper.Builder("pages").build(null)); ObjectMapper objectMapper = objectBuilder.build(builderContext); request.mapping(Collections.singletonMap("properties", objectMapper.toXContent(XContentType.JSON))); // Create the index and print the response CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); System.out.println(createIndexResponse); // Close the client client.close(); } } ``` 在这个程序中,首先创建了一个`CreateIndexRequest`对象,并将其命名为“my_index”。然后,通过调用`Settings`对象的建造者,设置该索引的设置。在这里,将索引分配给3个分片和2个副本。接下来,定义了索引的映射,其中包含3个字段:标题,作者和页数。这些字段分别定义为字符串,关键字和长整数类型。最后,通过调用`RestHighLevelClient`对象的`indices().create()`方法创建索引,并打印响应结果。最后关闭客户机。 上述程序旨在为您提供有关如何使用Java API创建索引的基本信息。使用Elasticsearch创建索引的最佳做法将取决于您的具体需求和应用程序的需求。 ### 回答3: Elasticsearch是一种开源的搜索引擎,是建立在Lucene之上的,是一个基于RESTful的分布式搜索引擎,提供全文搜索、结构化搜索、分析等功能。JavaElasticsearch的主要开发语言。在Java创建Elasticsearch索引需要进行以下步骤: 1. 引入Elasticsearch客户端库 首先需要引入ElasticsearchJava客户端库,在pom.xml文件中添加以下依赖: <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.6.0</version> </dependency> 2. 创建Elasticsearch客户端 使用TransportClient客户端连接服务器,在Elasticsearch 7.0版本中该客户端已被废弃,建议使用RestHighLevelClient客户端。以下是创建RestHighLevelClient客户端的示例代码: RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"), new HttpHost("localhost", 9201, "http"))); 3. 创建索引Elasticsearch中,数据存储在索引中,索引相当于关系数据库中的数据库。以下是创建索引的示例代码: CreateIndexRequest request = new CreateIndexRequest("index_name"); client.indices().create(request, RequestOptions.DEFAULT); 其中,index_name是要创建索引名称。如果索引已经存在,将抛出索引已存在的异常。可以使用IndexExistsRequest查看是否已经存在该索引。 4. 添加映射 Elasticsearch中的文档拥有多个字段,每个字段可以定义不同的类型,如字符串、日期、数字等。映射就是定义字段类型的过程。以下是添加映射的示例代码: XContentBuilder mappingBuilder = XContentFactory.jsonBuilder() .startObject() .startObject("properties") .startObject("field1") .field("type", "text") .endObject() .startObject("field2") .field("type", "long") .endObject() .endObject() .endObject(); PutMappingRequest request = new PutMappingRequest("index_name") .source(mappingBuilder); client.indices().putMapping(request, RequestOptions.DEFAULT); 其中,field1和field2是要创建的字段名称,type指定字段类型。可以添加更多的字段,并设置不同的类型。 5. 关闭客户端 完成创建索引后,需要关闭客户端,释放资源。以下是关闭客户端的示例代码: client.close(); 总体来说,创建Elasticsearch索引需要引入客户端库、创建客户端、创建索引、添加映射、关闭客户端五个步骤。其中,添加映射是可选的,如果不添加映射,则Elasticsearch将根据输入的数据自动推导字段类型。学习和掌握这些步骤,可以方便地使用Java创建Elasticsearch索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值