Skip to content

Commit 85bcec8

Browse files
committed
Track 6 files into repository.
- modified document-apis/index-api.md - modified document-apis/get-api.md - modified document-apis/delete-by-query-api.md - modified document-apis/delete-api.md - modified document-apis/update-api.md - modified document-apis/multi-get-api.md Auto commit by GitBook Editor
1 parent 545c94b commit 85bcec8

File tree

6 files changed

+485
-0
lines changed

6 files changed

+485
-0
lines changed

document-apis/delete-api.md

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
### Delete API
3+
4+
根据ID删除:
5+
6+
```
7+
DeleteResponse response = client.prepareDelete("twitter", "tweet", "1").get();
8+
9+
```
10+
11+
更多请查看 [delete API](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-delete.html) 文档
12+
13+
#### 配置线程
14+
15+
`operationThreaded` 设置为 `true` 是在不同的线程里执行此次操作
16+
17+
下面的例子是`operationThreaded` 设置为 `false`
18+
```
19+
GetResponse response = client.prepareGet("twitter", "tweet", "1")
20+
.setOperationThreaded(false)
21+
.get();
22+
```
23+
24+
```
25+
DeleteResponse response = client.prepareDelete("twitter", "tweet", "1")
26+
.setOperationThreaded(false)
27+
.get();
28+
```

document-apis/delete-by-query-api.md

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
### Delete By Query API
3+
4+
通过查询条件删除
5+
6+
```
7+
BulkByScrollResponse response =
8+
DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
9+
.filter(QueryBuilders.matchQuery("gender", "male")) //查询条件
10+
.source("persons") //index(索引名)
11+
.get(); //执行
12+
13+
long deleted = response.getDeleted(); //删除文档的数量
14+
```
15+
16+
如果需要执行的时间比较长,可以使用异步的方式处理,结果在回调里面获取
17+
18+
19+
```
20+
DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
21+
.filter(QueryBuilders.matchQuery("gender", "male")) //查询
22+
.source("persons") //index(索引名)
23+
.execute(new ActionListener<BulkByScrollResponse>() { //回调监听
24+
@Override
25+
public void onResponse(BulkByScrollResponse response) {
26+
long deleted = response.getDeleted(); //删除文档的数量
27+
}
28+
@Override
29+
public void onFailure(Exception e) {
30+
// Handle the exception
31+
}
32+
});
33+
```

document-apis/get-api.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
### Get API
3+
get api可以通过id查看文档:
4+
5+
```
6+
GetResponse response = client.prepareGet("twitter", "tweet", "1").get();
7+
8+
```
9+
更多请查看 [rest get API](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-get.html) 文档
10+
11+
#### 配置线程
12+
13+
`operationThreaded` 设置为 `true` 是在不同的线程里执行此次操作
14+
15+
下面的例子是`operationThreaded` 设置为 `false`
16+
```
17+
GetResponse response = client.prepareGet("twitter", "tweet", "1")
18+
.setOperationThreaded(false)
19+
.get();
20+
```

document-apis/index-api.md

+283
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,283 @@
1+
### Index API
2+
Index API 允许我们存储一个JSON格式的文档,使数据可以被搜索。文档通过index、type、id唯一确定。我们可以自己提供一个id,或者也使用Index API 为我们自动生成一个。
3+
4+
这里有几种不同的方式来产生JSON格式的文档(document):
5+
6+
- 手动方式,使用原生的byte[]或者String
7+
- 使用Map方式,会自动转换成与之等价的JSON
8+
- 使用第三方库来序列化beans,如Jackson
9+
- 使用内置的帮助类 XContentFactory.jsonBuilder()
10+
11+
#### 手动方式
12+
13+
[数据格式](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/mapping-date-format.html)
14+
```
15+
String json = "{" +
16+
"\"user\":\"kimchy\"," +
17+
"\"postDate\":\"2013-01-30\"," +
18+
"\"message\":\"trying out Elasticsearch\"" +
19+
"}";
20+
```
21+
##### 实例
22+
23+
```
24+
/**
25+
* 手动生成JSON
26+
*/
27+
@Test
28+
public void CreateJSON(){
29+
30+
String json = "{" +
31+
"\"user\":\"fendo\"," +
32+
"\"postDate\":\"2013-01-30\"," +
33+
"\"message\":\"Hell word\"" +
34+
"}";
35+
36+
IndexResponse response = client.prepareIndex("fendo", "fendodate")
37+
.setSource(json)
38+
.get();
39+
System.out.println(response.getResult());
40+
41+
}
42+
```
43+
44+
#### Map方式
45+
Map是key:value数据类型,可以代表json结构.
46+
47+
```
48+
Map<String, Object> json = new HashMap<String, Object>();
49+
json.put("user","kimchy");
50+
json.put("postDate",new Date());
51+
json.put("message","trying out Elasticsearch");
52+
```
53+
##### 实例
54+
55+
```
56+
/**
57+
* 使用集合
58+
*/
59+
@Test
60+
public void CreateList(){
61+
62+
Map<String, Object> json = new HashMap<String, Object>();
63+
json.put("user","kimchy");
64+
json.put("postDate","2013-01-30");
65+
json.put("message","trying out Elasticsearch");
66+
67+
IndexResponse response = client.prepareIndex("fendo", "fendodate")
68+
.setSource(json)
69+
.get();
70+
System.out.println(response.getResult());
71+
72+
}
73+
```
74+
75+
#### 序列化方式
76+
ElasticSearch已经使用了jackson,可以直接使用它把javabean转为json.
77+
78+
```
79+
import com.fasterxml.jackson.databind.*;
80+
81+
// instance a json mapper
82+
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
83+
84+
// generate json
85+
byte[] json = mapper.writeValueAsBytes(yourbeaninstance);
86+
```
87+
##### 实例
88+
89+
```
90+
/**
91+
* 使用JACKSON序列化
92+
* @throws Exception
93+
*/
94+
@Test
95+
public void CreateJACKSON() throws Exception{
96+
97+
CsdnBlog csdn=new CsdnBlog();
98+
csdn.setAuthor("fendo");
99+
csdn.setContent("这是JAVA书籍");
100+
csdn.setTag("C");
101+
csdn.setView("100");
102+
csdn.setTitile("编程");
103+
csdn.setDate(new Date().toString());
104+
105+
// instance a json mapper
106+
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
107+
108+
// generate json
109+
byte[] json = mapper.writeValueAsBytes(csdn);
110+
111+
IndexResponse response = client.prepareIndex("fendo", "fendodate")
112+
.setSource(json)
113+
.get();
114+
System.out.println(response.getResult());
115+
}
116+
```
117+
118+
#### XContentBuilder帮助类方式
119+
ElasticSearch提供了一个内置的帮助类XContentBuilder来产生JSON文档
120+
121+
```
122+
// Index name
123+
String _index = response.getIndex();
124+
// Type name
125+
String _type = response.getType();
126+
// Document ID (generated or not)
127+
String _id = response.getId();
128+
// Version (if it's the first time you index this document, you will get: 1)
129+
long _version = response.getVersion();
130+
// status has stored current instance statement.
131+
RestStatus status = response.status();
132+
```
133+
134+
##### 实例
135+
136+
```
137+
/**
138+
* 使用ElasticSearch 帮助类
139+
* @throws IOException
140+
*/
141+
@Test
142+
public void CreateXContentBuilder() throws IOException{
143+
144+
XContentBuilder builder = XContentFactory.jsonBuilder()
145+
.startObject()
146+
.field("user", "ccse")
147+
.field("postDate", new Date())
148+
.field("message", "this is Elasticsearch")
149+
.endObject();
150+
151+
IndexResponse response = client.prepareIndex("fendo", "fendodata").setSource(builder).get();
152+
System.out.println("创建成功!");
153+
154+
155+
}
156+
```
157+
158+
#### 综合实例
159+
```
160+
161+
import java.io.IOException;
162+
import java.net.InetAddress;
163+
import java.net.UnknownHostException;
164+
import java.util.Date;
165+
import java.util.HashMap;
166+
import java.util.Map;
167+
168+
import org.elasticsearch.action.index.IndexResponse;
169+
import org.elasticsearch.client.transport.TransportClient;
170+
import org.elasticsearch.common.settings.Settings;
171+
import org.elasticsearch.common.transport.InetSocketTransportAddress;
172+
import org.elasticsearch.common.xcontent.XContentBuilder;
173+
import org.elasticsearch.common.xcontent.XContentFactory;
174+
import org.elasticsearch.transport.client.PreBuiltTransportClient;
175+
import org.junit.Before;
176+
import org.junit.Test;
177+
178+
import com.fasterxml.jackson.core.JsonProcessingException;
179+
import com.fasterxml.jackson.databind.ObjectMapper;
180+
181+
public class CreateIndex {
182+
183+
private TransportClient client;
184+
185+
@Before
186+
public void getClient() throws Exception{
187+
//设置集群名称
188+
Settings settings = Settings.builder().put("cluster.name", "my-application").build();// 集群名
189+
//创建client
190+
client = new PreBuiltTransportClient(settings)
191+
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
192+
}
193+
194+
/**
195+
* 手动生成JSON
196+
*/
197+
@Test
198+
public void CreateJSON(){
199+
200+
String json = "{" +
201+
"\"user\":\"fendo\"," +
202+
"\"postDate\":\"2013-01-30\"," +
203+
"\"message\":\"Hell word\"" +
204+
"}";
205+
206+
IndexResponse response = client.prepareIndex("fendo", "fendodate")
207+
.setSource(json)
208+
.get();
209+
System.out.println(response.getResult());
210+
211+
}
212+
213+
214+
/**
215+
* 使用集合
216+
*/
217+
@Test
218+
public void CreateList(){
219+
220+
Map<String, Object> json = new HashMap<String, Object>();
221+
json.put("user","kimchy");
222+
json.put("postDate","2013-01-30");
223+
json.put("message","trying out Elasticsearch");
224+
225+
IndexResponse response = client.prepareIndex("fendo", "fendodate")
226+
.setSource(json)
227+
.get();
228+
System.out.println(response.getResult());
229+
230+
}
231+
232+
/**
233+
* 使用JACKSON序列化
234+
* @throws Exception
235+
*/
236+
@Test
237+
public void CreateJACKSON() throws Exception{
238+
239+
CsdnBlog csdn=new CsdnBlog();
240+
csdn.setAuthor("fendo");
241+
csdn.setContent("这是JAVA书籍");
242+
csdn.setTag("C");
243+
csdn.setView("100");
244+
csdn.setTitile("编程");
245+
csdn.setDate(new Date().toString());
246+
247+
// instance a json mapper
248+
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
249+
250+
// generate json
251+
byte[] json = mapper.writeValueAsBytes(csdn);
252+
253+
IndexResponse response = client.prepareIndex("fendo", "fendodate")
254+
.setSource(json)
255+
.get();
256+
System.out.println(response.getResult());
257+
}
258+
259+
/**
260+
* 使用ElasticSearch 帮助类
261+
* @throws IOException
262+
*/
263+
@Test
264+
public void CreateXContentBuilder() throws IOException{
265+
266+
XContentBuilder builder = XContentFactory.jsonBuilder()
267+
.startObject()
268+
.field("user", "ccse")
269+
.field("postDate", new Date())
270+
.field("message", "this is Elasticsearch")
271+
.endObject();
272+
273+
IndexResponse response = client.prepareIndex("fendo", "fendodata").setSource(builder).get();
274+
System.out.println("创建成功!");
275+
276+
277+
}
278+
279+
}
280+
```
281+
282+
283+
> 你还可以通过startArray(string)和endArray()方法添加数组。.field()方法可以接受多种对象类型。你可以给它传递数字、日期、甚至其他XContentBuilder对象。

document-apis/multi-get-api.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
### Multi Get API
3+
一次获取多个文档
4+
5+
6+
```
7+
MultiGetResponse multiGetItemResponses = client.prepareMultiGet()
8+
.add("twitter", "tweet", "1") //一个id的方式
9+
.add("twitter", "tweet", "2", "3", "4") //多个id的方式
10+
.add("another", "type", "foo") //可以从另外一个索引获取
11+
.get();
12+
13+
for (MultiGetItemResponse itemResponse : multiGetItemResponses) { //迭代返回值
14+
GetResponse response = itemResponse.getResponse();
15+
if (response.isExists()) { //判断是否存在
16+
String json = response.getSourceAsString(); //_source 字段
17+
}
18+
}
19+
```
20+
更多请浏览REST [multi get](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-multi-get.html) 文档

0 commit comments

Comments
 (0)