全文檢索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)建索引莺丑,在進行搜索

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

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

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

4.ElasticSearch簡介:

概念:

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

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

(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)依賴加進去

(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

啟動項目進行測試,觀察項目各項配置是否正確镇饮,項目能否成功啟動蜓竹,項目啟動成功后

(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é)點名字储藐,默認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)進行后臺編碼:

文檔類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();? ? }}

啟動項目,前臺進行訪問:

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洲尊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奈偏,更是在濱河造成了極大的恐慌坞嘀,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惊来,死亡現(xiàn)場離奇詭異丽涩,居然都是意外死亡,警方通過查閱死者的電腦和手機裁蚁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門矢渊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枉证,你說我怎么就攤上這事矮男。” “怎么了刽严?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵昂灵,是天一觀的道長避凝。 經(jīng)常有香客問我,道長眨补,這世上最難降的妖魔是什么管削? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮撑螺,結(jié)果婚禮上含思,老公的妹妹穿的比我還像新娘。我一直安慰自己甘晤,他們只是感情好含潘,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著线婚,像睡著了一般遏弱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塞弊,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天漱逸,我揣著相機與錄音,去河邊找鬼游沿。 笑死饰抒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诀黍。 我是一名探鬼主播袋坑,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眯勾!你這毒婦竟也來了枣宫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤吃环,失蹤者是張志新(化名)和其女友劉穎镶柱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體模叙,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡歇拆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了范咨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片故觅。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渠啊,靈堂內(nèi)的尸體忽然破棺而出输吏,到底是詐尸還是另有隱情,我是刑警寧澤替蛉,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布贯溅,位于F島的核電站拄氯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏它浅。R本人自食惡果不足惜译柏,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姐霍。 院中可真熱鬧鄙麦,春花似錦、人聲如沸镊折。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恨胚。三九已至骂因,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赃泡,已是汗流浹背侣签。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留急迂,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓蹦肴,卻偏偏與公主長得像僚碎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阴幌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

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