全文檢索ElasticSearch與Spring boot集成實例

全文檢索

1.全文搜索概念:

(1)數(shù)據(jù)結(jié)構(gòu):

·結(jié)構(gòu)化:只具有固定格式或者有限長度的數(shù)據(jù),如數(shù)據(jù)庫,元數(shù)據(jù)等

·非結(jié)構(gòu)化:指不定長或者無固定格式的數(shù)據(jù),如郵件,word文檔等

(2)非結(jié)構(gòu)化數(shù)據(jù)的檢索:

·順序掃描法:適合小數(shù)據(jù)量文件?物聯(lián)網(wǎng)系統(tǒng)開發(fā)找上海捌躍網(wǎng)絡(luò)科技有限公司

·全文搜索:將非結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)為結(jié)構(gòu)化的數(shù)據(jù),然后創(chuàng)建索引,在進(jìn)行搜索

(3)概念:全文搜索是一種將文件中所有文本域搜索項匹配的文件資料檢索方式

2.全文搜索實現(xiàn)原理

3.全文搜索實現(xiàn)技術(shù):基于java的開源實現(xiàn)Lucene,ElasticSearch(具有自身的分布式管理功能),Solr

4.ElasticSearch簡介:

概念:

(1)高度可擴展的開源全文搜索和分析引擎

(2)快速的,近實的多大數(shù)據(jù)進(jìn)行存儲,搜索和分析

(3)用來支撐有復(fù)雜的數(shù)據(jù)搜索需求的企業(yè)級應(yīng)用

特點及介紹:

(1)分布式

(2)高可用

(3)對類型,支持多種數(shù)據(jù)類型

(4)多API

(5)面向文檔

(6)異不寫入

(7)近實時:每隔n秒查詢,在寫入磁盤中

(8)基于Lucene

(9)Apache協(xié)議?

5.ElasticSearch與Spring Boot集成

(1)配置環(huán)境:ElasticSearch,Spring Data ElasticSearch,JNA

(2)安裝ElasticSearch,下載包,解壓直接啟動即可,這里特別說一下ElasticSearch的一些異常問題,必須版本對應(yīng),其次端口問題一定要注意

(3)建立Spring Boot項目

(4)我們修改pom.xml文件,將相關(guān)依賴加進(jìn)去

(5)在項目代碼編寫之前我們必須在本地安裝ElasticSearch并在版本上與Spring Boot版本相兼容,其次注意端口號的問題,集成時ElasticSearch服務(wù)的端口號為9200,而客戶端端口號為9300

接下來我們啟動本地安裝的ElasticSearch然后在啟動我們的項目:

<?xml version="1.0"encoding="UTF-8"?>4.0.0com.dhtt.spring.boot.blogspring.data.action0.0.1-SNAPSHOTjarspring.data.actionDemo project for Spring Bootorg.springframework.bootspring-boot-starter-parent2.1.0.RELEASE<!-- lookup parent from repository -->UTF-8UTF-81.8org.springframework.bootspring-boot-starter-data-jpa<!-- spring boot集成elasticsearch -->org.springframework.bootspring-boot-starter-data-elasticsearchorg.springframework.dataspring-data-elasticsearchorg.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-web<!-- 添加熱部署 -->org.springframework.bootspring-boot-devtoolsorg.springframework.bootspring-boot-starter-testtest<!-- JNA 的依賴 -->net.java.dev.jnajna4.5.1org.elasticsearchelasticsearch<!-- 內(nèi)存數(shù)據(jù)庫h2 --><!-- <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId>

? ? ? ? ? ? </dependency> --><!-- MySql數(shù)據(jù)庫驅(qū)動 -->mysqlmysql-connector-java5.1.46<!-- hibernate持久層框架引入 -->org.hibernatehibernate-core5.3.7.Finalorg.springframework.bootspring-boot-maven-plugin

啟動項目進(jìn)行測試,觀察項目各項配置是否正確,項目能否成功啟動,項目啟動成功后

(5)接下來配置application.properties文件:

#thymeleaf配置spring.thymeleaf.encoding=UTF-8#熱部署靜態(tài)文件,不需要緩存,實時觀察文件修改效果spring.thymeleaf.cache=false#使用html5標(biāo)準(zhǔn)spring.thymeleaf.mode=HTML5spring.thymeleaf.suffix=.htmlspring.resources.chain.strategy.content.enabled=true#elasticsearch服務(wù)器地址spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300#連接超時時間spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s #節(jié)點名字,默認(rèn)elasticsearch#spring.data.elasticsearch.cluster-name=elasticsearch #spring.data.elasticsearch.repositories.enable=true#spring.data.elasticsearch.properties.path.logs=./elasticsearch/log#spring.data.elasticsearch.properties.path.data=./elasticsearch/data#數(shù)據(jù)庫連接配置spring.datasource.url=jdbc:mysql://localhost:3306/blog_test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=falsespring.datasource.username=rootspring.datasource.password=qitao1996spring.datasource.driver-class-name=com.mysql.jdbc.Driver#jpa配置spring.jpa.show-sql=truespring.jpa.hibernate.ddl-auto=create-drop

(6)進(jìn)行后臺編碼:

文檔類EsBlog:

packagecom.dhtt.spring.boot.blog.spring.data.action.entity;importjava.io.Serializable;importjavax.persistence.Id;importorg.springframework.data.elasticsearch.annotations.Document;/** * EsBlog實體(文檔)類 *? *@authorQiTao * */@Document(indexName="blog",type="blog")//指定文檔publicclassEsBlogimplementsSerializable{/**

? ? *

? ? */privatestaticfinallongserialVersionUID =4745983033416635193L;@IdprivateString id;privateString title;privateString summary;privateString content;protectedEsBlog(){super();? ? }publicEsBlog(String title, String summary, String content){super();this.title = title;this.summary = summary;this.content = content;? ? }publicStringgetId(){returnid;? ? }publicvoidsetId(String id){this.id = id;? ? }publicStringgetTitle(){returntitle;? ? }publicvoidsetTitle(String title){this.title = title;? ? }publicStringgetSummary(){returnsummary;? ? }publicvoidsetSummary(String summary){this.summary = summary;? ? }publicStringgetContent(){returncontent;? ? }publicvoidsetContent(String content){this.content = content;? ? }@OverridepublicStringtoString(){return"EsBlog [id="+ id +", title="+ title +", summary="+ summary +", content="+ content +"]";? ? }}

資源庫,定義數(shù)據(jù)查詢接口:

packagecom.dhtt.spring.boot.blog.spring.data.action.repository;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageRequest;importorg.springframework.data.elasticsearch.repository.ElasticsearchRepository;importcom.dhtt.spring.boot.blog.spring.data.action.entity.EsBlog;/** * EsBlogRepository接口 *? *@authorQiTao * */publicinterfaceEsBlogRepositoryextendsElasticsearchRepository{/**? ? * 分頁,查詢,去重? ? *? ? ? *@paramtitle? ? *@paramsummary? ? *@paramcontent? ? *@parampageable? ? *@return*/PagefindDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(String title, String summary,

? ? ? ? ? ? String content, PageRequest pageRequest);}

最后編寫Controller類:

packagecom.dhtt.spring.boot.blog.spring.data.action.web.user;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageRequest;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importcom.dhtt.spring.boot.blog.spring.data.action.entity.EsBlog;importcom.dhtt.spring.boot.blog.spring.data.action.repository.EsBlogRepository;@RestController@RequestMapping("/blogs")publicclassBlogController{@AutowiredprivateEsBlogRepository esBlogRepository;@GetMappingpublicListlist(@RequestParam(value ="title")String title,? ? ? ? ? ? @RequestParam(value ="summary")String summary,? ? ? ? ? ? @RequestParam(value ="content")String content,? ? ? ? ? ? @RequestParam(value ="pageIndex", defaultValue ="0")intpageIndex,? ? ? ? ? ? @RequestParam(value ="pageSize", defaultValue ="10")intpageSize){//添加測試數(shù)據(jù)esBlogRepository.deleteAll();? ? ? ? esBlogRepository.save(newEsBlog("登黃鶴樓","王之渙的等黃鶴樓","百日依山盡,黃河入海流,欲窮千里目,更上一層樓"));? ? ? ? esBlogRepository.save(newEsBlog("相思","王維的相思","紅豆生南國,春來發(fā)幾枝,愿君多采截,此物最相思"));? ? ? ? esBlogRepository.save(newEsBlog("靜夜思","李白的靜夜思","床前明月光,疑是地上霜,舉頭望明月,低頭思故鄉(xiāng)"));//查詢獲取PageRequest pageRequest=PageRequest.of(pageIndex,pageSize);? ? ? ? Page page= esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(title, summary, content, pageRequest);returnpage.getContent();? ? }}

啟動項目,前臺進(jìn)行訪問:

前臺結(jié)果打印成功,故我們的Elasticsearch+Spring Boot集成成功

轉(zhuǎn)自:http://blog.51cto.com/13501268/2322430

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評論 6 342
  • SpringMVC原理分析 Spring Boot學(xué)習(xí) 5、Hello World探究 1、POM文件 1、父項目...
    jack_jerry閱讀 1,490評論 0 1
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,978評論 1 92
  • 兄弟: 展信佳。 明天就要高考了。想來,第二次出征的你,此時此刻,應(yīng)該會在一個能看得到天空的地方欣賞著美麗的落日,...
    Froidelune閱讀 636評論 0 0

友情鏈接更多精彩內(nèi)容