準備工作
安裝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,如需集羣搭建請參考以下步驟
- 賦值三份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());
更多查詢請參考官方文檔~