1.ES索引的操作
@SpringBootTest
public class HotelIndexTest {
private RestHighLevelClient client;
//创建索引库
@Test
void createHotelIndex() throws IOException {
//1.创建request对象
CreateIndexRequest request = new CreateIndexRequest("hotel");
//2.准备请求的参数
request.source(MAPPING_TEMPLATE, XContentType.JSON);
//3.发送请求
client.indices().create(request, RequestOptions.DEFAULT);
}
//删除索引
@Test
void deleteHotelIndex() throws IOException {
//1.创建request对象
DeleteIndexRequest request = new DeleteIndexRequest("hotel");
//2.发送请求
client.indices().delete(request, RequestOptions.DEFAULT);
}
//查询索引
@Test
void selectIndexTest() throws IOException {
//1.创建request对象
GetIndexRequest request = new GetIndexRequest("hotel");
//2.发送请求
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.err.println(exists ? "索引库存在" : "索引库不存在");
}
@BeforeEach
void setUp(){
this.client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://192.168.154.133:9200")
));
}
@AfterEach
void tearDown() throws IOException {
this.client.close();
}
}
创建索引
2.对文档的操作
新增
// 添加文档
@Test
void addDocumentTest() throws IOException {
Hotel hotel = iHotelService.getById(61083L);
//类型转换为文档类型
HotelDoc hotelDoc = new HotelDoc(hotel);
// 1准备request对象
IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());
// 2准备Json文档
request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);
// 3发送请求
client.index(request,RequestOptions.DEFAULT);
System.err.println();
}
查询
// 查询文档
@Test
void selectDocumentTest() throws IOException {
// 创建request对象
GetRequest request = new GetRequest("hotel", "61083");
// 发送请求,得到结果
GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
// 解析json数据
String json = getResponse.getSourceAsString();
System.err.println(json);
}
修改
// 更新文档
@Test
void testUpdateDocumentByIdTest() throws IOException {
// 创建request对象
UpdateRequest request = new UpdateRequest("hotel", "30 9208");
// 准备参数
request.doc(
"isAD",true
);
client.update(request,RequestOptions.DEFAULT);
}
删除文档
// 删除文档
@Test
void deleteDocumentTest() throws IOException {
DeleteRequest request = new DeleteRequest("hotel", "61083");
client.delete(request,RequestOptions.DEFAULT);
}
添加所有
// 添加所有
@Test
void addAllDocumentTest() throws IOException {
List<Hotel> hotels = iHotelService.list();
// 1准备request对象
BulkRequest request = new BulkRequest();
// 2准备添加多个request
for (Hotel hotel :hotels) {
HotelDoc hotelDoc = new HotelDoc(hotel);
// 创建request对象
request.add(new IndexRequest("hotel")
.id(hotelDoc.getId().toString())
.source(JSON.toJSONString(hotelDoc),XContentType.JSON));
}
// 3发请求
client.bulk(request,RequestOptions.DEFAULT);
}
查询操作
1查询所有
// 查询所有
@Test
void matchAllTest() throws IOException {
// 1.创建request对象
SearchRequest request = new SearchRequest("hotel");
// 2.准备DSL
request.source().query(QueryBuilders.matchAllQuery());
// 3。发送request请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析结果
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("一共有"+total+"条数据");
// 5.查询的结果数组
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit :hits1) {
String json = hit.getSourceAsString();
JSON.parseObject(json, HotelDoc.class);
System.out.println(json);
}
}
2.matchQuery all字段中上海的数据
@Test
void matchAll() throws IOException {
// 1.创建request对象
SearchRequest request = new SearchRequest("hotel");
// 2.准备DSL
request.source().query(QueryBuilders.matchQuery("all","上海"));
// 3。发送request请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析结果
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("一共有"+total+"条数据");
// 5.查询的结果数组
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit :hits1) {
String json = hit.getSourceAsString();
JSON.parseObject(json, HotelDoc.class);
System.out.println(json);
}
}
精确查询 和价格范围查询
@Test
void termTest() throws IOException {
// 1.创建request对象
SearchRequest request = new SearchRequest("hotel");
// 2.准备DSL
// 精确查询
// request.source().query(QueryBuilders.termQuery("name","家"));
// 价格范围查询
request.source().query(QueryBuilders.rangeQuery("price").gte(100).lte(1000));
// 3。发送request请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析结果
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("一共有"+total+"条数据");
// 5.查询的结果数组
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit :hits1) {
String json = hit.getSourceAsString();
JSON.parseObject(json, HotelDoc.class);
System.out.println(json);
}
}
组合查询
@Test
void boolQueryTest() throws IOException {
// 1.创建request对象
SearchRequest request = new SearchRequest("hotel");
// 2.准备DSL
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// 2.2添加must条件
boolQueryBuilder.must(QueryBuilders.termQuery("city","北京"));
// 2.3添加filter条件
boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").lte(2000));
// 2.4 将条件加入到request中去
request.source().query(boolQueryBuilder);
// 3。发送request请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析结果
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("一共有"+total+"条数据");
// 5.查询的结果数组
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit :hits1) {
String json = hit.getSourceAsString();
JSON.parseObject(json, HotelDoc.class);
System.out.println(json);
}
}
分页和高亮
// 分页排序
@Test
void sizeTest() throws IOException {
int page=1,size=5;
// 1.创建request对象
SearchRequest request = new SearchRequest("hotel");
request.source().from((page-1)*size).size(size).sort("price", SortOrder.ASC);
// 3。发送request请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析结果
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("一共有"+total+"条数据");
// 5.查询的结果数组
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit :hits1) {
String json = hit.getSourceAsString();
JSON.parseObject(json, HotelDoc.class);
System.out.println(json);
}
}
//高亮查询
@Test
void hightLightTest() throws IOException {
// 1.创建request对象
SearchRequest request = new SearchRequest("hotel");
// 2.准备DSL
request.source().query(QueryBuilders.matchQuery("all","北京"));
request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
// 3。发送request请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析结果
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("一共有"+total+"条数据");
// 5.查询的结果数组
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit :hits1) {
String json = hit.getSourceAsString();
JSON.parseObject(json, HotelDoc.class);
System.out.println(json);
}
}