SpringBoot整合ElasticSearch

準備工作

安裝ElasticSearch
安裝分詞器analyzer
安裝可視化插件elasticSearch-head
可從網上資源下載安裝即可,我這裏演示環境爲6.2.4

核心依賴

   <!--SpringBoot啓動器-->
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
    <!--實體支持依賴-->    
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.2.3.RELEASE</version>
        </dependency>
        

配置文件

注意:我這裏是配置了集羣elasticSearch,如需集羣搭建請參考以下步驟

  1. 賦值三份ElasticSearch,改變端口即可,核心代碼如下
    elasticSearch 三份配置文件根據該ip端口依次修改
#允許跨域訪問
http.cors.enabled: true
#任何請求都有權限訪問
http.cors.allow-origin: /.*/
#集羣名稱
cluster.name: my-elasticsearch
#版本 
node.name: node-1
#服務器ip
network.host: 127.0.0.1
#服務器端口
http.port: 9201
#集羣節點單服務器端口
transport.tcp.port: 9301
#集羣下屬ip服務,順序最前表示默認9301
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]

SpringBoot核心配置文件

server:
  port: 8765
spring:
  application:
    name: elastic-server
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/myservers?characterEncoding=utf-8
    # sql is update
    jpa:
      hibernate:
        ddl-auto: update
      show-sql: true
  data:
    elasticsearch:
      cluster-name: my-elasticsearch
      cluster-nodes: 127.0.0.1:9301,127.0.0.1:9302,127.0.0.1:9303
eureka:
  instance:
    hostname: localhost
    defaultZone:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

基本操作步驟

創建索引庫實體

ElasticSearch會根據實體屬性字段映射索引庫並完成創建

//indexName:索引名稱
//type:文檔名稱
@Document( indexName = "indexname",type = "myindex")
//jdk1.8 lombok插件
@Data
public class MyNameList {
//主鍵
    @Id
//字段屬性支持,
//	value:對應字段名稱,store:返回響應數據時是否返回默認true    
    @Field(value = "id",store = true)
    private Long id;
//type:字段類型Text爲文本
//analyzer:分詞器,ik_max_word更細制分詞查詢,ik_smart精準查詢    
    @Field(value = "name", type = FieldType.Text, analyzer = "ik_max_word",store = true)
    private String name;

    @Field(value = "soudu", type = FieldType.Text, analyzer = "ik_max_word",store = true)
    private String soudu;

根據實體創建索引庫並映射

SpringBoot-ElasticSearch提供類

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

方法:
創建索引
elasticsearchTemplate.createIndex(MyNameList.class);
//映射索引屬性類型
elasticsearchTemplate.putMapping(MyNameList.class);

索引庫CRUD

定義接口繼承操作ElasticSearch的提供類

public interface XwLElasticDao extends ElasticsearchRepository<MyNameList,Long> {
}

@Autowired
private XwLElasticDao xwLElasticDao;
@Autowired
private JdbcTemplate jdbcTemplate;

  				MyNameList myNameList = new MyNameList();
                myNameList.setId(21l);
                myNameList.setName("張");
                int x = (int) (Math.random() * 50) + 1;
                myNameList.setSoudu(String.valueOf(x));
                xwLElasticDao.save(myNameList);
  • 查看地址:http://localhost:9100/
    可視化索引狀態圖
  • 數據瀏覽在這裏插入圖片描述
    - 刪除索引

elasticsearchTemplate.deleteIndex(MyNameList.class)

- 修改索引

  • elasticSearch修改是先進行刪除然後再進行新增,所以在修改時根據id先刪除當前內容,然後再新增最新數據即可

查詢舉例

需求:用戶輸入中文字符檢索姓名並進行分頁處理,在響應結果中只展示姓名,其它字段不進行顯示

 //封裝查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        //分頁
 //分頁       queryBuilder.withPageable(PageRequest.of(current<=1?0:current-1, size));
        //過濾條件
        MatchQueryBuilder matchQueryBuilder = null;
     	//匹配查找數據
            matchQueryBuilder = QueryBuilders.matchQuery("name",nameCode);
            
            queryBuilder.withQuery(matchQueryBuilder);
       
        //只顯示有關信息-姓名
        queryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{"name"}, null));
        //查詢
        Page<MyNameList> search = xwLElasticDao.search(queryBuilder.build());

更多查詢請參考官方文檔~

發佈了45 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章