Java项目中连接es进行增删改查文档,建议使用repository设计模式吗
时间: 2024-02-24 12:55:44 浏览: 23
在 Java 项目中连接 Elasticsearch 进行增删改查文档,建议使用 Repository 设计模式来封装 Elasticsearch 的访问逻辑。
使用 Repository 设计模式可以将 Elasticsearch 的访问逻辑封装起来,提供简单的接口供上层调用。这样可以减少代码的重复性,降低业务逻辑层与 Elasticsearch 的耦合度,使得代码更加易于维护和扩展。
以下是一个示例代码,演示如何使用 Repository 设计模式来封装 Elasticsearch 的访问逻辑:
```
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BookRepository {
private final String INDEX_NAME = "books";
private final String TYPE_NAME = "book";
@Autowired
private Client esClient;
public Book getBookById(String id) {
GetResponse response = esClient.prepareGet(INDEX_NAME, TYPE_NAME, id).execute().actionGet();
if (response.isExists()) {
return new Book(response.getId(), response.getSource());
}
return null;
}
public void addBook(Book book) {
IndexResponse response = esClient.prepareIndex(INDEX_NAME, TYPE_NAME)
.setId(book.getId())
.setSource(book.toMap())
.execute()
.actionGet();
}
public void updateBook(String id, Book book) {
esClient.prepareUpdate(INDEX_NAME, TYPE_NAME, id)
.setDoc(book.toMap())
.execute()
.actionGet();
}
public void deleteBookById(String id) {
esClient.prepareDelete(INDEX_NAME, TYPE_NAME, id)
.execute()
.actionGet();
}
public List<Book> searchBooks(String keyword) {
SearchResponse response = esClient.prepareSearch(INDEX_NAME)
.setTypes(TYPE_NAME)
.setQuery(QueryBuilders.queryStringQuery(keyword))
.execute()
.actionGet();
List<Book> books = new ArrayList<>();
for (SearchHit hit : response.getHits().getHits()) {
books.add(new Book(hit.getId(), hit.getSource()));
}
return books;
}
}
```
在上面的代码中,我们定义了一个 BookRepository 类,它使用 Autowired 注解注入了一个 Elasticsearch 的 Client 对象。BookRepository 类提供了一些常用的操作方法,例如 getBookById()、addBook()、updateBook()、deleteBookById() 和 searchBooks(),用于对 Elasticsearch 中的文档进行增删改查操作。
总之,使用 Repository 设计模式可以将 Elasticsearch 的访问逻辑封装起来,提供简单的接口供上层调用。这样可以使得代码更加易于维护和扩展。