spring-boot-starter-data-elasticsearch實現es的增刪查改

首先,必須吐槽一下,springboot這個elasticsearch包對於elasticsearch的支持十分不友好,目前只支持很低版本的elasticsearch,若是有哪位大牛知道如何兼容更高版本的elasticsearch,歡迎給我留言。java

 

es下載地址:https://www.elastic.co/downloads/elasticsearchnode

我測試的es版本是2.4.5,spring-boot-starter-data-elasticsearch不支持過高版本的elasticsearch。spring

另外,我是在windows下安裝的,在官網下載好zip包後,到bin文件夾下,運行elasticsearch.bat,測試:http://localhost:9200/,能正確顯示版本就能夠了。windows

 

安裝好後,咱們在pom.xml文件添加依賴api

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>1.5.10.RELEASE</version>
        </dependency>

 

在properties文件中添加es設置:
spring.data.elasticsearch.cluster-name=elasticsearch es默認 spring.data.elasticsearch.cluster-nodes= 127.0.0.1:9300 es默認

 

實體類:springboot

@Document(indexName = "monitoralarm", type = "monitorAlarms")//加上了@Document註解以後,默認狀況下這個實體中全部的屬性都會被創建索引、而且分詞 public class MonitorAlarmVO implements Serializable { @Id private Long id; private String uniqueKey; private Long monitoryPointId; private int modelDivisionType; private Long groupId; private int type; private int status; private String serverHost; private String data; private int picWidth; private int picHeight; private String objects; private Date alarmTime; private Date createTime; private boolean isRemove; private Date removeTime; }

 

接口:app

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface MonitorAlarmRepository extends ElasticsearchRepository<MonitorAlarmVO, Long> { //Page<MonitorAlarmVO> findByGroupId(Long groupId);
 }

 

controller:socket

public class MonitorAlarmController { @Autowired private MonitorAlarmRepository monitorAlarmRepository; //============================elasticsearch
    /** * 一、根據id查 * @param id * @return
     */ @GetMapping("/esById/{id}") public MonitorAlarmVO getBookById(@PathVariable Long id) { return monitorAlarmRepository.findOne(id); } /** * 二、查 ++:全文檢索(根據整個實體的全部屬性,可能結果爲0個) * @param key * @return
     */ @GetMapping("/esByKey/{key}") public List<MonitorAlarmVO> testSearch(@PathVariable String key) { QueryStringQueryBuilder builder = new QueryStringQueryBuilder(key); Iterable<MonitorAlarmVO> searchResult = monitorAlarmRepository.search(builder); Iterator<MonitorAlarmVO> iterator = searchResult.iterator(); List<MonitorAlarmVO> list = new ArrayList<MonitorAlarmVO>(); while (iterator.hasNext()) { list.add(iterator.next()); } return list; } /** * 三、查 +++:分頁、分數、分域(結果一個也很多) * @param page * @param size * @param q * @return * @return
     */ @GetMapping("/{page}/{size}/{key}") public List<MonitorAlarmVO> searchCity(@PathVariable Integer page, @PathVariable Integer size, @PathVariable String key) { // 分頁參數
        Pageable pageable = new PageRequest(page, size); // 分數,並自動按分排序
        FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery() .add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("name", key)), ScoreFunctionBuilders.weightFactorFunction(1000)) // 權重:name 1000分
                .add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("message", key)), ScoreFunctionBuilders.weightFactorFunction(100)); // 權重:message 100分 // 分數、分頁
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(pageable) .withQuery(functionScoreQueryBuilder).build(); Page<MonitorAlarmVO> searchPageResults = monitorAlarmRepository.search(searchQuery); return searchPageResults.getContent(); } /** * 四、增 * @param monitorAlarmVO * @return
     */ @PostMapping("/esInsert") public MonitorAlarmVO insertBook(MonitorAlarmVO monitorAlarmVO) { monitorAlarmRepository.save(monitorAlarmVO); return monitorAlarmVO; } /** * 五、刪 id * @param id * @return
     */ @DeleteMapping("/esDelete/{id}") public MonitorAlarmVO insertBook(@PathVariable Long id) { MonitorAlarmVO monitorAlarmVO = monitorAlarmRepository.findOne(id); monitorAlarmRepository.delete(id); return monitorAlarmVO; } /** * 六、改 * @param monitorAlarmVO * @return
     */ @PutMapping("/esUpdate") public MonitorAlarmVO updateBook(MonitorAlarmVO monitorAlarmVO) { monitorAlarmRepository.save(monitorAlarmVO); return monitorAlarmVO; } //============================elasticsearch
}

 

好的,咱們啓動試試,報了一個錯誤,提示以下:elasticsearch

threw exception; nested exception is java.lang.NoSuchMethodError: org.jboss.netty.channel.socket.nio.NioWorker
 
這個是由於個人項目裏的dubbo/zookeeper的netty包和es的netty包衝突了致使啓動不了,解決方法是排除其中一個的netty包,我這裏選擇排除dubbo和zookeeper的netty包試試,可是後面發現排除了netty包會致使dubbo出錯,有一箭雙鵰的辦法麻煩給我留言下。
以下:
<dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>netty</artifactId>
                    <groupId>org.jboss.netty</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>netty</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

最後,咱們能夠啓動項目,訪問試試了。spring-boot

相關文章
相關標籤/搜索