Java后端技术-ElasticSearch学习笔记

环境准备

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

编写配置文件

# es 服务地址
elasticsearch.host=192.168.80.10
# es 服务端口
elasticsearch.port=9200
# 配置日志级别,开启 debug 日志
logging.level.com.atguigu.es=debug

编写配置类

  • ElasticsearchRestTemplate 是 spring-data-elasticsearch 项目中的一个类,和其他 spring 项目中的 template类似。
  • 在新版的 spring-data-elasticsearch 中,ElasticsearchRestTemplate 代替了原来的 ElasticsearchTemplate。
  • 原因是 ElasticsearchTemplate 基于 TransportClient,TransportClient 即将在 8.x 以后的版本中移除。所以,推荐使用 ElasticsearchRestTemplate。
  • ElasticsearchRestTemplate 基 于 RestHighLevelClient 客户端的。需要自定义配置类,继承AbstractElasticsearchConfiguration,并实现 elasticsearchClient()抽象方法,创建 RestHighLevelClient 对象。
@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    @Value("${elasticsearch.host}")
    private String host;
    @Value("${elasticsearch.port}")
    private Integer port;
    //重写父类方法
    @Override
    public RestHighLevelClient elasticsearchClient() {
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
        RestHighLevelClient restHighLevelClient = new
                RestHighLevelClient(builder);
        return restHighLevelClient;
    }
}

创建实体类映射操作

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "shopping")
public class ProductES {
    //必须有 id,这里的 id 是全局唯一的标识,等同于 es 中的"_id"
    @Id
    private Long id;//商品唯一标识
    /**
     * type : 字段数据类型
     * analyzer : 分词器类型
     * index : 是否索引(默认:true)
     * Keyword : 短语,不进行分词
     */
    @Field(type = FieldType.Text)
    private String title;//商品名称
    @Field(type = FieldType.Keyword)
    private String category;//分类名称
    @Field(type = FieldType.Double)
    private Double price;//商品价格
    @Field(type = FieldType.Keyword, index = false)
    private String images;//图片地址
}

创建DAO数据访问对象

@Repository
public interface ProductDao extends ElasticsearchRepository<ProductES, Long> {

}

注入依赖

@Autowired
private ElasticsearchRestTemplate esTemplate;
@Autowired
private ProductDao productDao;

索引操作

添加索引

// 创建索引并增加映射配置
esTemplate.createIndex(ProductES.class);

删除索引

esTemplate.deleteIndex(ProductES.class);

文档操作

添加文档

ProductES product = new ProductES();
product.setId(2L);
product.setTitle("华为手机");
product.setCategory("手机");
product.setPrice(2999.0);
product.setImages("https://blog.csdn.net/xiaoyixiao_?spm=1001.2014.3001.5343");
productDao.save(product);

批量添加文档

List<ProductES> productList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    ProductES product = new ProductES();
    product.setId(Long.valueOf(i));
    product.setTitle("[" + i + "]小米手机");
    product.setCategory("手机");
    product.setPrice(1999.0 + i);
    product.setImages("https://blog.csdn.net/xiaoyixiao_?spm=1001.2014.3001.5343");
    productList.add(product);
}
productDao.saveAll(productList);

修改文档

ProductES product = new ProductES();
product.setId(2L);
product.setTitle("小米手机");
product.setCategory("手机");
product.setPrice(2999.0);
product.setImages("https://blog.csdn.net/xiaoyixiao_?spm=1001.2014.3001.5343");
productDao.save(product);

删除文档

ProductES product = new ProductES();
product.setId(2L);
productDao.delete(product);

通过ID查找文档

ProductES productES = productDao.findById(2L).get();

查询全部文档

Iterable<ProductES> products = productDao.findAll();

查询操作

分页查询

//设置排序(排序方式,正序还是倒序,排序的 id)
Sort sort = Sort.by(Sort.Direction.DESC, "id");
int currentPage = 0;//当前页,第一页从 0 开始,1 表示第二页
int pageSize = 5;//每页显示多少条
//设置查询分页
PageRequest pageRequest = PageRequest.of(currentPage, pageSize, sort);
//分页查询
Page<ProductES> productPage = productDao.findAll(pageRequest);

匹配查询

TermQueryBuilder termQuery = QueryBuilders.termQuery("title", "小米");
Iterable<ProductES> products = productDao.search(termQuery);

匹配分页查询

int currentPage = 0;
int pageSize = 5;
//设置查询分页
PageRequest pageRequest = PageRequest.of(currentPage, pageSize);
TermQueryBuilder termQuery = QueryBuilders.termQuery("title", "小米");
Iterable<ProductES> products = productDao.search(termQuery, pageRequest);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java后端中初始化Elasticsearch,您需要使用Elasticsearch Java客户端库。以下是一个简单的示例: 1.添加依赖项 首先,您需要将Elasticsearch Java客户端库添加到您的项目中。您可以通过Maven或Gradle等构建工具添加以下依赖项: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.12.0</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.12.0</version> </dependency> ``` 2.创建连接 使用Elasticsearch Java客户端库,您可以通过以下方式创建与Elasticsearch集群的连接: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); ``` 在这个例子中,我们创建一个`RestHighLevelClient`实例,并使用`HttpHost`对象来指定Elasticsearch集群的主机和端口。 3.创建索引 现在,我们可以使用`RestHighLevelClient`来创建一个新的索引: ```java CreateIndexRequest request = new CreateIndexRequest("my-index"); client.indices().create(request, RequestOptions.DEFAULT); ``` 在这个例子中,我们创建一个`CreateIndexRequest`对象,并将索引名称设置为"my-index"。然后,我们使用`indices()`方法来获取`IndicesClient`实例,然后调用`create()`方法来创建索引。 4.插入数据 接下来,我们可以使用`RestHighLevelClient`来将数据插入到索引中: ```java IndexRequest request = new IndexRequest("my-index"); request.id("1"); String jsonString = "{" + "\"user\":\"John\"," + "\"postDate\":\"2021-05-01\"," + "\"message\":\"Hello Elasticsearch\"" + "}"; request.source(jsonString, XContentType.JSON); IndexResponse response = client.index(request, RequestOptions.DEFAULT); ``` 在这个例子中,我们创建一个`IndexRequest`对象,并将索引名称设置为"my-index"。然后,我们将文档ID设置为"1",并将文档内容作为JSON字符串传递给请求。最后,我们使用`index()`方法将文档插入到索引中,并获取`IndexResponse`实例以获得响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值