ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Elasticsearch简单学习
[打印本页]
作者:
光之使者
时间:
昨天 13:21
标题:
Elasticsearch简单学习
1、依赖的导入
<!--ES依赖-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
复制代码
2、客户端链接
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));
复制代码
3、索引库的相关操作
1、索引库的创建
@Test
void createTestIndex() throws IOException {
/*创建索引库*/
//1.创建Request对象,索引库名称必须为小写字母
CreateIndexRequest request = new CreateIndexRequest("test_index");
String source = "{\n" +
" "mappings":{\n" +
" "properties":{\n" +
" "id":{\n" +
" "type":"integer"\n" +
" },\n" +
" "name":{\n" +
" "type":"text",\n" +
" "analyzer":"ik_max_word"\n" +
" },\n" +
" "age":{\n" +
" "type":"integer"\n" +
" },\n" +
" "sex":{\n" +
" "type":"keyword"\n" +
" },\n" +
" "bossId":{\n" +
" "type":"integer"\n" +
" },\n" +
" "departmentId":{\n" +
" "type":"integer"\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
//2.准备请求的参数:DSL语句
request.source(source, XContentType.JSON);
//3.发请求
client.indices().create(request, RequestOptions.DEFAULT);
}
复制代码
2、判定索引库是否存在
@Test
void existsTestIndex() throws IOException {
/*判断索引库是否存在*/
//1.创建Request对象,名称必须为小写字母
GetIndexRequest request = new GetIndexRequest("test_index");
//2.发请求
boolean is = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(is);
}
复制代码
3、删除索引库
@Test
void deleteTestIndex() throws IOException {
/*删除索引库*/
//1.创建Request对象,名称必须为小写字母
DeleteIndexRequest request = new DeleteIndexRequest("test_index");
//2.发请求
client.indices().delete(request, RequestOptions.DEFAULT);
}
复制代码
4、文档的操作
1、创建文档
@Test
void createDocTest() throws IOException {
//从数据库中获取数据对象
Employee employee = employeeMapper.selectAllById(1);
//1. 创建Request对象
IndexRequest request = new IndexRequest("test_index").id(employee.getId().toString());
//2.准备json文档
String source = JSON.toJSONString(employee);
//2.1准备json文档
request.source(source, XContentType.JSON);
//3.发请求
client.index(request, RequestOptions.DEFAULT);
}
复制代码
2、获取指定的文档
@Test
void getDocTest() throws IOException {
//1.创建Request对象
GetRequest request = new GetRequest("test_index","1");
//2.发请求,得到结果
GetResponse response = client.get(request, RequestOptions.DEFAULT);
//3.解析结果
String json = response.getSourceAsString();
System.out.println(json);
Employee employee = JSON.parseObject(json, Employee.class);
System.out.println(employee);
}
复制代码
3、更新文档
@Test
void updateDocTest() throws IOException {
//1.创建Request对象
UpdateRequest request = new UpdateRequest("test_index","1");
//2.准备DSL语句
request.doc(
"age",18
);
//3.发请求
client.update(request,RequestOptions.DEFAULT);
}
复制代码
4、删除文档
@Test
void deleteDocTest() throws IOException {
//1.创建Request对象
DeleteRequest request = new DeleteRequest("test_index","1");
//2.发请求
client.delete(request,RequestOptions.DEFAULT);
}
复制代码
5、批量操作(创建)
@Test
void batchCreateDocTest() throws IOException {
//1.创建Request对象
BulkRequest request = new BulkRequest();
//2.准备DSL语句,批量增加文档
List<Employee> employees = employeeMapper.selectAll();
for(Employee e : employees){
request.add(new IndexRequest("test_index")
.id(e.getId().toString())
.source(JSON.toJSONString(e),XContentType.JSON));
}
//3.发请求
client.bulk(request,RequestOptions.DEFAULT);
}
复制代码
5、搜索文档
1、分词查询-查询全部
@Test
void matchAllTest() throws IOException { //分词查询
//1.准备Request
SearchRequest request = new SearchRequest("test_index");
//2.组织DSL参数
request.source() // 查询全部
.query(QueryBuilders.matchAllQuery());
//3.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
//4.解析结果
SearchHits searchHits = response.getHits();
//4.1获取总条数
long total = searchHits.getTotalHits().value;
System.out.println("总共有:" + total + "条数据");
//4.2获取文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历数组
for(SearchHit h : hits){
String json = h.getSourceAsString();
Employee employee = JSON.parseObject(json, Employee.class);
System.out.println(employee);
}
}
复制代码
2、分词查询-指定字段
@Test
void matchQueryTest() throws IOException { //分词查询
//1.准备Request
SearchRequest request = new SearchRequest("test_index");
//2.组织DSL参数
request.source() //查询指定字段的值,也可以指定多个字段 .multiMatchQuery()
.query(QueryBuilders.matchQuery("name","晨"));
//3.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
//4.解析结果
SearchHits searchHits = response.getHits();
//4.1获取总条数
long total = searchHits.getTotalHits().value;
System.out.println("总共有:" + total + "条数据");
//4.2获取文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历数组
for(SearchHit h : hits){
String json = h.getSourceAsString();
Employee employee = JSON.parseObject(json, Employee.class);
System.out.println(employee);
}
}
复制代码
3、精确查询
@Test
void termQueryTest() throws IOException { //精确查询
//1.准备Request
SearchRequest request = new SearchRequest("test_index");
//2.组织DSL参数
request.source() //精确查询只能查询 非text(分词字段),如果查询分词字段,则自动采用模糊分词查询
.query(QueryBuilders.termQuery("age","33"));
//3.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
//4.解析结果
SearchHits searchHits = response.getHits();
//4.1获取总条数
long total = searchHits.getTotalHits().value;
System.out.println("总共有:" + total + "条数据");
//4.2获取文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历数组
for(SearchHit h : hits){
String json = h.getSourceAsString();
Employee employee = JSON.parseObject(json, Employee.class);
System.out.println(employee);
}
}
复制代码
4、范围查询
@Test
void rangeQueryTest() throws IOException { //范围查询
//1.准备Request
SearchRequest request = new SearchRequest("test_index");
//2.组织DSL参数
request.source() //范围查询,gte:大于等于,lte:小于等于,gt:大于,lt:小于
.query(QueryBuilders.rangeQuery("age").gte(30).lte(35));
//3.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
//4.解析结果
SearchHits searchHits = response.getHits();
//4.1获取总条数
long total = searchHits.getTotalHits().value;
System.out.println("总共有:" + total + "条数据");
//4.2获取文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历数组
for(SearchHit h : hits){
String json = h.getSourceAsString();
Employee employee = JSON.parseObject(json, Employee.class);
System.out.println(employee);
}
}
复制代码
5、复合查询
@Test
void boolQueryTest() throws IOException { //复合查询
//1.准备Request
SearchRequest request = new SearchRequest("test_index");
//2.1创建复合查询对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//2.2添加查询条件
boolQuery.must(QueryBuilders.matchQuery("name","雨"));
boolQuery.filter(QueryBuilders.rangeQuery("age").gte(20).lte(35));
//2.3组织DSL参数
request.source()
.query(boolQuery);
//3.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
//4.解析结果
SearchHits searchHits = response.getHits();
//4.1获取总条数
long total = searchHits.getTotalHits().value;
System.out.println("总共有:" + total + "条数据");
//4.2获取文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历数组
for(SearchHit h : hits){
String json = h.getSourceAsString();
Employee employee = JSON.parseObject(json, Employee.class);
System.out.println(employee);
}
}
复制代码
6、分页排序查询
@Test
void pageSortQueryTest() throws IOException { //分页、排序查询
// 页码,每页大小
int page = 3,size = 10;
//1.准备Request
SearchRequest request = new SearchRequest("test_index");
//2组织DSL参数
request.source()
.from((page-1)*size) // 包含form,(page-1)*size,是前端传过来的页码和每页条数
.size(size)
.sort("id", SortOrder.ASC)
.query(QueryBuilders.matchAllQuery());
//3.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
//4.解析结果
SearchHits searchHits = response.getHits();
//4.1获取总条数
long total = searchHits.getTotalHits().value;
System.out.println("总共有:" + total + "条数据");
//4.2获取文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历数组
for(SearchHit h : hits){
String json = h.getSourceAsString();
Employee employee = JSON.parseObject(json, Employee.class);
System.out.println(employee);
}
}
复制代码
6、高亮查询
@Test
void highLightQueryTest() throws IOException { //高亮查询
//1.准备Request
SearchRequest request = new SearchRequest("test_index");
//2组织DSL参数
request.source()
.highlighter(new HighlightBuilder() //高亮显示
.field("name") //字段名
.requireFieldMatch(false) // 是否与查询字段匹配
) // 用的默认标签 <em></em>
.query(QueryBuilders.matchQuery("name","晨"));
//3.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
//4.解析结果
SearchHits searchHits = response.getHits();
//4.1获取总条数
long total = searchHits.getTotalHits().value;
System.out.println("总共有:" + total + "条数据");
//4.2获取文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历数组
for(SearchHit h : hits){
String json = h.getSourceAsString();
Employee employee = JSON.parseObject(json, Employee.class);
// 高亮显示,因为每条数据都是带有 晨 的,所以每条数据都有一个HighlightField用于替换
HighlightField name = h.getHighlightFields().get("name");
//替换
employee.setName(name.getFragments()[0].toString());
System.out.println(employee);
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4