注意:沒有實現排序和分頁
1 導入依賴包
<!-- springBoot 項目-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2 新建一個repository
繼承ES這個接口
package com.lenovo.qes.portal.modules.knowledge.demo.repository;
import com.lenovo.qes.portal.modules.knowledge.demo.document.ProductDocument;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;
/**
* @author zhoudong
* @version 0.1
* @date 2018/12/13 17:35
*/
@Component
public interface ProductDocumentRepository extends ElasticsearchRepository<ProductDocument,String> {
}
3 使用repository
package com.lenovo.qes.portal.modules.knowledge.demo.service.impl;
import com.alibaba.fastjson.JSON;
import com.lenovo.qes.portal.modules.knowledge.demo.document.ProductDocument;
import com.lenovo.qes.portal.modules.knowledge.demo.repository.ProductDocumentRepository;
import com.lenovo.qes.portal.modules.knowledge.demo.service.EsSearchService;
import com.lenovo.qes.portal.modules.knowledge.service.impl.BaseSearchServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* elasticsearch 搜索引擎 service實現
* @author zhoudong
* @version 0.1
* @date 2018/12/13 15:33
*/
@Service
public class EsSearchServiceImpl extends BaseSearchServiceImpl<ProductDocument> implements EsSearchService {
private Logger log = LoggerFactory.getLogger(getClass());
@Resource
private ElasticsearchTemplate elasticsearchTemplate;
@Resource
private ProductDocumentRepository productDocumentRepository;
@Override
public void save(ProductDocument ... productDocuments) {
elasticsearchTemplate.putMapping(ProductDocument.class);
if(productDocuments.length > 0){
/**
* 批量保存
**/
productDocumentRepository.saveAll(Arrays.asList(productDocuments));
log.info("【保存索引】:{}",JSON.toJSONString());
}
}
@Override
public void delete(String id) {
/**
* 根據id刪除
**/
productDocumentRepository.deleteById(id);
}
@Override
public void deleteAll() {
/**
* 刪除所有
**/
productDocumentRepository.deleteAll();
}
@Override
public ProductDocument getById(String id) {
/**
* 根據id查詢
**/
return productDocumentRepository.findById(id).get();
}
@Override
public List<ProductDocument> getAll() {
List<ProductDocument> list = new ArrayList<>();
/**
* 查詢所有
**/
productDocumentRepository.findAll().forEach(list::add);
return list;
}
}
es中文檔、java實體類應該如下映射:
package com.lenovo.qes.portal.modules.knowledge.demo.document;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.Mapping;
import java.io.Serializable;
import java.util.Date;
/**
* 產品實體
* @author zhoudong
* @version 0.1
* @date 2018/12/13 15:22
* @Mapping 解決IK分詞不能使用問題
*/
@Data
@Document(indexName = "orders", type = "product")
@Mapping(mappingPath = "productIndex.json")
public class ProductDocument implements Serializable {
@Id
private String id;
@Field(analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String productName;
@Field(analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String productDesc;
private Date createTime;
private Date updateTime;
}