ElasticsearchRepository實現ES讀寫操作

注意:沒有實現排序和分頁

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;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章