springboot 集成 spring-data-elasticsearch


版本對照

  

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

 

1、在application.yml中添加配置

  

spring:
  data:
   elasticsearch:
     repositories:
       enabled: true
      #多實例集群擴展時需要配置以下兩個參數
     #cluster-name: datab-search
     #cluster-nodes: 127.0.0.1:9300,127.0.0.1:9301  

 

2、添加 Maven 依賴  

   <!---開箱即用,版本默認和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分詞器

    示例:

@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 訪問層 

/**
 * 基本操作repository-curd
 * @author 滾動的蛋
 *
 */
public interface CpRepository extends ElasticsearchRepository<CpDocument, Integer> {
}

  5、創建索引+查詢示例 

@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticSearchTest {
    @Autowired
     CpRepository cpRepository;
    @Autowired 
    ElasticsearchTemplate elsTemplate;//ElasticsearchTemplate中提供了創建索引的API

@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()); } }

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM