简介
Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎,拥有强大的数据检索分析能力。
ES使用JSON作为文档的序列化格式。JSON 序列化为大多数编程语言所支持,并且已经成为 NoSQL 领域的标准格式。 它简单、简洁、易于阅读。
所以说ES数据中的“字段”更为灵活。同一索引->类型下的文件的json格式可以各不相同。
名词解释:索引、类型、文档
一个 Elasticsearch 集群可以 包含多个 索引
,相应的每个索引可以包含多个 类型
。 这些不同的类型存储着多个 文档
,每个文档又有 多个 属性 。
索引(名词):
如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。
索引(动词):
索引一个文档 就是存储一个文档到一个 索引 (名词)中以便被检索和查询。这非常类似于 SQL 语句中的 INSERT
关键词,除了文档已存在时,新文档会替换旧文档情况之外。
类型:
如果将索引理解为数据库,那么类型就可以理解为表。但这是一个不正确的对比,在7.x将类型过时移除了。
https://www.cnblogs.com/wangzhen3798/p/10765202.html
安装
docker 安装比较简单,所以采用docker安装。
docker pull elasticsearch:7.13.2
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" elasticsearch:7.13.2
9300端口: ES节点之间通讯使用
9200端口: ES节点 和 外部 通讯使用
9300是tcp通讯端口,集群间和TCPClient都走的它;9200是http协议的RESTful接口
转载:https://blog.csdn.net/u013045102/article/details/85322862
增删改查
增删改查通过9200端口restFul接口实现
如:查询所有
POST http://localhost:9200/_search
content-type →application/json; charset=UTF-8
Java Client
es7.x 提供了两种
Java Low Level REST Client
Java High Level REST Client
这里使用Java High Level REST Client构建简单demo
pom.xml
<!--es-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.13.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.13.2</version>
</dependency>
EsTest.java
/**
* @author Jenson
*/
public class EsTest {
public static void main(String[] args) throws IOException {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
EsTest esTest = new EsTest();
try {
esTest.esBulkIndex(client);
esTest.multiGet(client);
} finally {
client.close();
}
}
public void esBulkIndex(RestHighLevelClient client) throws IOException {
BulkRequest request = new BulkRequest();
request.add(new IndexRequest("company_employee").id("1")
.source(XContentType.JSON, "name", "huangshiren", "age", "15")
.versionType(VersionType.EXTERNAL)
.version(6)
);
request.add(new IndexRequest("company_employee").id("2")
.source(XContentType.JSON, "name", "majiajue", "age", "14")
.versionType(VersionType.EXTERNAL)
.version(6)
);
request.add(new IndexRequest("company_employee").id("3")
.source(XContentType.JSON, "name", "lvxiaodong", "age", "13")
.versionType(VersionType.EXTERNAL)
.version(6)
);
// 同步执行
BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
for (BulkItemResponse bulkItemResponse : bulkResponse) {
DocWriteResponse itemResponse = bulkItemResponse.getResponse();
switch (bulkItemResponse.getOpType()) {
case INDEX:
case CREATE:
IndexResponse indexResponse = (IndexResponse) itemResponse;
System.out.println(indexResponse.toString());
break;
case UPDATE:
UpdateResponse updateResponse = (UpdateResponse) itemResponse;
System.out.println(updateResponse.toString());
break;
case DELETE:
DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
System.out.println(deleteResponse.toString());
default:
break;
}
}
}
public void multiGet(RestHighLevelClient client) throws IOException {
MultiGetRequest request = new MultiGetRequest();
request.add(
new MultiGetRequest.Item("company_employee", "1")
);
MultiGetResponse response = client.mget(request, RequestOptions.DEFAULT);
MultiGetItemResponse firstItem = response.getResponses()[0];
// assertNull(firstItem.getFailure());
GetResponse firstGet = firstItem.getResponse();
String index = firstItem.getIndex();
String id = firstItem.getId();
if (firstGet.isExists()) {
System.out.println("------------------------------");
long version = firstGet.getVersion();
System.out.println("version :" + version);
String sourceAsString = firstGet.getSourceAsString();
System.out.println("sourceAsString :" + sourceAsString);
Map<String, Object> sourceAsMap = firstGet.getSourceAsMap();
System.out.println("name :" + sourceAsMap.get("name"));
// byte[] sourceAsBytes = firstGet.getSourceAsBytes();
} else {
System.out.println("找不到...............");
}
}
}
ES权威指南(中文、内容有过时):https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ES指南(官方):https://www.elastic.co/guide/en/elasticsearch/reference/index.html
网友评论