springboot 集成 spring-data-elasticsearch

版本对照

  

    各版本的文档说明:https://docs.spring.io/spring-data/elasticsearch/docs/

 

1、在application.yml中添加配置

  

1
2
3
4
5
6
7
8
spring:
  data:
   elasticsearch:
     repositories:
       enabled: true
      #多实例集群扩展时需要配置以下两个参数
     #cluster-name: datab-search
     #cluster-nodes: 127.0.0.1:9300,127.0.0.1:9301  

 

2、添加 Maven 依赖  

1
2
3
4
5
<!---开箱即用,版本默认和springboot版本对应-->
 <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

 

3、建立实体entity

    注解说明:  

  Spring Data通过注解来声明字段的映射属性,有下面的三个注解:

  @Document 作用在类,标记实体类为文档对象,一般有两个属性
    indexName:对应索引库名称
    type:对应在索引库中的类型
    shards:分片数量,默认5
    replicas:副本数量,默认1
  @Id 作用在成员变量,标记一个字段作为id主键
  @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
    type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等
    text:存储数据时候,会自动分词,并生成索引
    keyword:存储数据时候,不会分词建立索引
    Numerical:数值类型,分两类
      基本数据类型:long、interger、short、byte、double、float、half_float
      浮点数的高精度类型:scaled_float
      需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
    Date:日期类型
      elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
    index:是否索引,布尔类型,默认是true
    store:是否存储,布尔类型,默认是false
    analyzer:分词器名称,这里的ik_max_word即使用ik分词器

    示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Document(indexName = "cp_doc", type = "doc", shards = 10, replicas = 0)
public class CpDocument extends BaseEntity {
 
  @Id//作用在成员变量,标记一个字段作为id主键
  private long id ;
  @Field(type = FieldType.Text)
  private String name ;
  @Field(type = FieldType.Text)
  private String address ;
  public long getId() {
  return id;
  }
  public void setId(long id) {
  this.id = id;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getAddress() {
  return address;
  }
  public void setAddress(String address) {
  this.address = address;
}

  

 4、编写 Repository 访问层 

1
2
3
4
5
6
7
/**
 * 基本操作repository-curd
 * @author 滚动的蛋
 *
 */
public interface CpRepository extends ElasticsearchRepository<CpDocument, Integer> {
}

  5、创建索引+查询示例 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticSearchTest {
    @Autowired
     CpRepository cpRepository;
    @Autowired
    ElasticsearchTemplate elsTemplate;//ElasticsearchTemplate中提供了创建索引的API<br><br>
    @Test
    public void addIndexTest() {
        //创建索引
        boolean indexRes = elsTemplate.createIndex(CpDocument.class);
        System.out.println("======创建索引结果:"+indexRes+"=========");
        //添加索引
        CpDocument cpTest = new CpDocument();
        cpTest.setId(1);
        cpTest.setName("阿里巴巴");
        cpTest.setAddress("北京路12号");
        cpRepository.save(cpTest);
    }
     
    @Test
   public void srarchTest() {
        //这个只做一个多字段的匹配查询示例,其它的可以查看API文档使用
        //"name","address" 为匹配的字段
          MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("阿里巴巴","address","name");//多字段匹配QueryBuilder
          SearchQuery searchQuery = new NativeSearchQueryBuilder()//构建查询对象
                  .withQuery(multiMatchQuery)
                  .withIndices("cp_doc")//索引名
                  .withPageable(PageRequest.of(0, 10))//分页
                  .build();
          Iterable<CpDocument> productDtos = cpRepository.search(searchQuery);
          ArrayList<CpDocument> CpDocuments = Lists.newArrayList(productDtos);
          for (CpDocument cpDocument : CpDocuments) {
            System.out.printf("企业名称:%s,企业地址:%s\n",cpDocument.getName(),cpDocument.getAddress());
        }
   }

  

  

posted on   滚动的蛋  阅读(4273)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示