elasticsearch的使用

pom

<!-- elasticsearch 启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

yml

spring:
  elasticsearch:
    uris:
      - http://111.111.111.111:9200

创建文档document

@Document(indexName = "product")
@Data
/**
 * name: 当前字段在索引中的名称,不设置默认使用字段名称
 * type: 字段类型
 * analyzer: 创建索引的分词器类型 不设置使用默认
 * searchAnalyzer: 搜索条件的分词器类型,不设置使用 analyzer
 * index: 是否索引(默认:true)
 * keyword : 短语,不进行分词
 * format: 日期格式化,预设的值没一个符合中国人习惯的,
 *   format = {}, pattern = "yyyy-MM-dd HH:mm:ss" 覆盖默认设置
 */
public class ProductDoc {

    //商品Id
    @Id
    private Long id;

    //分类Id
    @Field(type = FieldType.Long)
    private Long categoryId;

    //图片地址
    @Field(type = FieldType.Text,index = false)
    private String img;

    //商品标题
    @Field(type = FieldType.Text,analyzer = "ik_smart")
    private String title;

    //商品简介
    @Field(type = FieldType.Text,analyzer = "ik_smart")
    private String intro;

    //一级分类名称
    @Field(type = FieldType.Keyword)
    private String categoryNameLevel1;

    //二级分类名称
    @Field(type = FieldType.Keyword)
    private String categoryNameLevel2;

    //三级分类名称
    @Field(type = FieldType.Keyword)
    private String categoryNameLevel3;

    //商品价格
    @Field(type = FieldType.Double)
    private BigDecimal price;

    //商品销量
    @Field(type = FieldType.Integer)
    private Integer sales;

    //更新时间
    @Field(type = FieldType.Date, format = {}, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    //创建时间
    @Field(type = FieldType.Date, format = {}, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

}

创建repository
public interface ProductRepository extends ElasticsearchRepository<ProductDoc, Long> {

}

注入ProductRepository和ElasticsearchRestTemplate

搜索

List<SearchHit<ProductDoc>> searchHits=template.search(query,ProductDoc.class).getSearchHits();
List<ProductDoc> list=new ArrayList<>();
searchHits.forEach(item->{
    list.add(item.getContent());
});

新增或更新

productRepository.save(productDoc);

删除

productRepository.deleteById(id);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一个分布式搜索和分析引擎,它提供了强大的全文搜索功能和实时数据分析能力。下面是一些常用的Elasticsearch使用方式和操作示例: 1. 索引数据:在Elasticsearch中,你需要将数据索引到一个或多个索引中。索引是一种结构化的数据存储方式,类似于数据库中的表。你可以使用Elasticsearch提供的API(如REST API或Elasticsearch客户端库)来索引数据。 ```java IndexRequest request = new IndexRequest("my_index"); // 指定索引名称 request.id("1"); // 指定文档ID request.source("field1", "value1", "field2", "value2"); // 指定字段和对应的值 IndexResponse response = client.index(request, RequestOptions.DEFAULT); ``` 2. 搜索数据:使用Elasticsearch进行全文搜索非常强大和灵活。你可以构建各种查询条件来匹配文档,并按照相关性进行排序和过滤。 ```java SearchRequest request = new SearchRequest("my_index"); // 指定索引名称 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("field", "value")); // 匹配字段和值 request.source(sourceBuilder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); SearchHits hits = response.getHits(); for (SearchHit hit : hits) { String id = hit.getId(); Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // 处理搜索结果 } ``` 3. 聚合和分析:Elasticsearch提供了丰富的聚合功能,用于对数据进行分组、计数、求和等操作,以便进行数据分析和可视化。 ```java SearchRequest request = new SearchRequest("my_index"); // 指定索引名称 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_field").field("field"); // 按字段进行分组 sourceBuilder.aggregation(aggregation); request.source(sourceBuilder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); Terms terms = response.getAggregations().get("by_field"); for (Terms.Bucket bucket : terms.getBuckets()) { String key = bucket.getKeyAsString(); long docCount = bucket.getDocCount(); // 处理聚合结果 } ``` 4. 更新和删除数据:如果你需要更新或删除索引中的文档,可以使用相应的API进行操作。 ```java UpdateRequest request = new UpdateRequest("my_index", "1"); // 指定索引名称和文档ID request.doc("field", "new_value"); // 更新字段的值 UpdateResponse response = client.update(request, RequestOptions.DEFAULT); ``` ```java DeleteRequest request = new DeleteRequest("my_index", "1"); // 指定索引名称和文档ID DeleteResponse response = client.delete(request, RequestOptions.DEFAULT); ``` 这些只是Elasticsearch的一些基本使用方式和操作示例,实际使用中还有更多的功能和配置选项可供探索。你可以参考Elasticsearch的官方文档和API参考来深入了解和使用Elasticsearch。祝你使用Elasticsearch愉快!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值