アプリケーションでは、多くの場合、機能が取得される - 方法(キーワードなど)のデータベースを確認した場合、データベースクエリのキーワードに含まれるデータを、効率が非常に低いです。この問題を解決するために、我々はElasticSearchフレームワークを導入しました。
ElasticSearchをダウンロードしてインストールし、ブログを参照してください。https://blog.csdn.net/yjclsx/article/details/81302041
次に、我々は春データElasticsearchリポジトリがElasticSearchを統合使います
ステップ1:マッピングの導入
< 依存性> < のgroupId > org.springframework.boot </ のgroupId > < たartifactId >ばねブートスタータデータelasticsearch </ たartifactId > </ 依存>
ステップ2:設定されたプロファイル
spring.data.elasticsearch.cluster名= elasticsearch
spring.data.elasticsearch.cluster-ノード= 127.0.0.1:9300
spring.data.elasticsearch.repositories.enabled =真
ステップ3 ::エンティティクラスを定義します
パッケージcom.example.demo.domain。 インポートしたjava.io.Serializable; 輸入org.springframework.data.elasticsearch.annotations.Document。 @Document(INDEXNAME =「ブログ」、タイプ=「記事」) パブリック クラス条が実装Serializableを{ プライベート 静的 最終 長い serialVersionUIDの= 1Lを。 プライベート 長いID。 プライベート文字列のタイトル。 プライベート文字列の要約。 プライベート文字列の内容。 プライベート int型のPV。 // 省略ゲッター、セッター方法 }
ここでは、物品を表し条インスタンスの定義。類推リレーショナルデータベース、インデックス同等のテーブルには、同等のレコードを文書化した場合
ElasticSearch 5.6.8ですElasticSearch 6.Xバージョンでは、タイプの使用はお勧めしませんが、また7.xでのバージョンが完全に廃止された型になりますが、私はここにいる、それはまだ書かタイプです。ここで、また、インデックス・エントリに代わって記事に代わって記事。
ステップ4:インターフェースの定義、および継承ElasticSearchRepository
パッケージcom.example.demo.repository。 輸入com.example.demo.domain.Article。 輸入org.springframework.data.elasticsearch.annotations.Document。 輸入org.springframework.data.elasticsearch.repository.ElasticsearchRepository; 輸入org.springframework.stereotype.Component。 輸入org.springframework.stereotype.Repository; @Component // @Repository パブリック インターフェイス ArticleRepositoryは延び ElasticsearchRepository <論文、ロング> { }
ここにリポジトリDAOに相当し、操作は同じMySQLやElasticSearchです
ステップ5:サービスのインタフェースと実装クラスを定義します。
パッケージcom.example.demo.service。 輸入com.example.demo.domain.Article。 輸入org.elasticsearch.index.query.QueryBuilder。 パブリック インターフェイスArticleService { (条条)保存条; 反復可能な <論説> 検索(QueryBuilder queryBuilder)。 }
実装クラス
パッケージcom.example.demo.service.impl。 輸入com.example.demo.domain.Article。 輸入com.example.demo.repository.ArticleRepository。 輸入com.example.demo.service.ArticleService。 輸入org.elasticsearch.index.query.QueryBuilder。 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.stereotype.Service。 @Service パブリック クラス ArticleServiceImplは実装ArticleService { @Autowired プライベートArticleRepositoryのarticleRepositoryを。 @Override 公衆(記事の記事){保存条 戻りarticleRepository.save(記事)。 } @Override 公共のIterable <論文> 検索(QueryBuilder queryBuilder){ 戻りarticleRepository.search(queryBuilder)を、 } }
ステップ6:テストメソッドを書きます
パッケージcom.example.demo.controller。 輸入com.example.demo.domain.Article。 輸入com.example.demo.domain.JsonData。 輸入com.example.demo.repository.ArticleRepository。 輸入com.example.demo.service.ArticleService。 輸入org.elasticsearch.index.query.QueryBuilder。 輸入org.elasticsearch.index.query.QueryBuilders。 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.web.bind.annotation.GetMapping。 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.RestController。 @RestController @RequestMapping( "/ API / V1 /資料" ) パブリック クラスArticleControllerは{ @Autowired プライベートArticleServiceのarticleService。 (@GetMapping "保存" ) 公共の保存オブジェクトを(長いID、文字列のタイトル){ 条の記事 = 新条(); article.setId(ID)。 article.setPv( 123 )。 article.setContent( "搜索elasticsearch框架整合" ); article.setTitle(タイトル)。 article.setSummary( "搜索框架整合" ); articleService.save(記事)。 返すJsonData.buildSuccessを(); } @GetMapping( "検索" ) パブリックオブジェクト検索(文字列のタイトル){ // QueryBuilder queryBuilder = QueryBuilders.matchAllQuery()。// 搜索全部文档 QueryBuilder queryBuilder = QueryBuilders.matchQuery( "タイトル" 、タイトル)。 反復可能な <論説>リスト= articleService.search(queryBuilder)。 返すJsonData.buildSuccess(リスト)。 } }
ポストマン・テストを使用します