文章目录
7.1、找文档





1、找到原生的依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
2、找对象

3、分析这个类中的方法
7.2、配置基本的项目

注意:

7.3、测试API
7.3.1、创建索引
前提:
- 在congfig下编写ElasticSearchConfig
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
- SpringBoot自带的测试类
@SpringBootTest
class EsApiApplicationTests {
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
//......
}
创建索引
// 测试索引的创建 Request
@Test
void testCreatIndex() throws IOException {
// 1、创建索引请求
CreateIndexRequest request = new CreateIndexRequest("chen_index");
// 2、客户端执行创建请求 IndicesClient,请求后获得相应
CreateIndexResponse createIndexResponse =
client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
7.3.2、获取索引
// 测试获取索引 判断其是否存在
@Test
void testExistIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("chen_index");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
7.3.3、删除索引
// 测试删除索引
@Test
void textDeleteIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("chen_index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
7.3.4、添加文档
首先创建一个实体User类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
public class User {
private String name;
private int age;
}
// 测试添加文档
@Test
void testAddDocument() throws IOException {
// 创建对象
User user = new User("张三", 3);
// 创建请求
IndexRequest request = new IndexRequest("chen_index");
// 规则 put /chen_index/_doc/1
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
// request.timeout("1s");
// 将我们的数据放入请求 这里需要导入我们的json依赖包,真实项目不建议使用fastjson
request.source(JSON.toJSONString(user), XContentType.JSON);
// 客户端发送请求
IndexResponse index = client.index(request, RequestOptions.DEFAULT);
System.out.println(index.toString());
System.out.println(index.status()); // 对应我们命令返回的状态 CREATED
}
7.3.5、获取文档
// 获取文档,判断是否存在
@Test
void testExists() throws IOException {
GetRequest request = new GetRequest("chen_index", "1");
// 不获取返回的 _source 的上下文了
// request.fetchSourceContext(new FetchSourceContext(false));
boolean exists = client.exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
7.3.6、获取文档信息
// 获取文档的信息
@Test
void testGetDocument() throws IOException {
GetRequest request = new GetRequest("chen_index", "1");
GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
System.out.println(getResponse.getSourceAsString()); // 打印文档的内容
System.out.println(getResponse); // 这里返回的全部内容和命令是一样的
}
7.3.7、更新文档信息
// 更新文档信息
@Test
void testUpdateDocument() throws IOException {
UpdateRequest request = new UpdateRequest("chen_index", "1");
request.timeout("1s");
User user = new User("李四",16);
request.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
System.out.println(update.status());
}
7.3.8、删除文档记录
// 删除文档记录
@Test
void testDeleteDocument() throws IOException {
DeleteRequest request = new DeleteRequest("chen_index", "1");
request.timeout("1s");
DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
System.out.println(delete.status());
}
7.3.9、批量插入
// 特殊的,真的项目一般都会批量插入数据!
@Test
void testBulkRequest() throws IOException {
BulkRequest request = new BulkRequest();
request.timeout("10s");
ArrayList<User> users = new ArrayList<>();
users.add(new User("chen1",3));
users.add(new User("chen2",3));
users.add(new User("chen3",3));
users.add(new User("chen4",3));
users.add(new User("chen5",3));
// 批处理请求
for (int i = 0; i < users.size(); i++) {
// 批量更新和批量删除,就在这里修改对应的请求
request.add(
new IndexRequest("chen_index")
.id(""+i)
.source(JSON.toJSONString(users.get(i)),XContentType.JSON));
}
BulkResponse bulk = client.bulk(request, RequestOptions.DEFAULT);
// 是否失败,返回false代表成功
System.out.println(bulk.hasFailures());
}
7.3.10、查询
// 查询
// SearchRequest 搜索请求
// SearchSourceBuilder 条件构造
// HighlightBuild 高亮
// TermQueryBuilder 精确查询
// MatchAllQueryBuilder
// xxxQueryBuilder 对应我们刚才看到的所有命令
@Test
void testSearch() throws IOException {
SearchRequest request = new SearchRequest("chen_index");
// 构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 查询条件,我们可以用QueryBuilders工具类来实现
// QueryBuilders.termQuery 精确
// QueryBuilders.matchAllQuery() 匹配所有
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "chen5");
// MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
sourceBuilder.query(termQueryBuilder);
// sourceBuilder.from();
// sourceBuilder.size();
sourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));
request.source(sourceBuilder);
SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
System.out.println(JSON.toJSONString(hits));
System.out.println("============================");
for (SearchHit hit : hits.getHits()) {
System.out.println(hit.getSourceAsMap());
}
Elasticsearch实战
本文详细介绍如何使用Elasticsearch进行文档操作,包括创建、获取、删除索引,添加、获取、更新、删除文档,批量插入及查询等核心功能,并提供Spring Boot环境下的具体实现代码。
1209

被折叠的 条评论
为什么被折叠?



