SpringBoot特別研究Part28:SpringBoot統合Elasticsearch(使用冗談と春データElasticsearch動作)

I.はじめに

Elasticsearchは、下のLuceneベースで分散検索サービスとデータセキュリティモードのマルチスタイルのAPI RESTfulなシャード(スライス)もresharding自動機能を提供して提供します

Elasticsearchはすばやく検索し、データ・ストレージを大量に分析することができます

SpringBootのデフォルトの両方の技術が相互作用するためのサポートとelasticsearch:冗談春データElasticsearch
使用SpringBootデフォルト春データElasticsearchの動作するモジュールを

第二に、使用

冗談は使用して非常に人気のElasticsearchクライアントツールでのHttpクライアントの相互作用を
インポートするために効果の必要性を取るために力に冗談のデフォルトをされていない冗談キットio.searchbox.client.JestClient

1、冗談を使用して動作

最初は輸入に依存冗談です。

注:バージョンによって及びElasticsearchが対応する
例を、私がいたの6.xバージョンElasticsearchその後、バージョン6.x冗談を使用

<dependency>
	<groupId>io.searchbox</groupId>
	<artifactId>jest</artifactId>
	<version>6.3.1</version>
</dependency>

Elasticsearchバージョンにアクセスすることができますip:9200復帰後のデータを参照してください。
ここに画像を挿入説明

そして、設定パラメータ:

URI 9200は、マシンの基本的なデフォルトのポートです

spring.elasticsearch.jest.uris=http://111.111.111.111:9200

注:設定IPだけではないURI、HTTPリクエストメソッドを持参する時間:ポートは、それ以外の場合は、スキーム名に不正な文字がエラーになり
ここに画像を挿入説明
接続に成功

実体を持つクラスの主キー属性に@JestId注意:

public class Student {
    
    // 用@JestId注解来标明主键 标注之后 存入Elasticsearch的id值就采用该属性的值了
    @JestId
    private Integer id;
    private String name;
    private String hobby;
    private String introduce;

    [getter和setter...]
}

その後の呼び出しがあります:

クラスへの注入JestClient:

@Autowired
JestClient jestClient;

インデックスに文書をElasticsearch:

Student student=new Student();
student.setId(1);
student.setName("陈涛");
student.setHobby("swimming");
student.setIntroduce("Hello World");

// 构建一个索引
// index(索引名).type(类型名)
// 还可通过id(id值)来设置id 因为id已经有了 就不设置了
Index index = new Index.Builder(student).index("zjitc").type("student").build();

try {
    // 执行该索引
    jestClient.execute(index);
} catch (IOException e) {
    e.printStackTrace();
}

ここに画像を挿入説明
成功インデックス


全文検索:

式のみを検索することができますJSON形式を渡す必要があります

// 定义搜索表达式
String json="{\n" +
        "    \"query\" : {\n" +
        "        \"match\" : {\n" +
        "            \"introduce\" : \"Hello\"\n" +
        "        }\n" +
        "    }\n" +
        "}";

// 构建搜索
Search search = new Search.Builder(json).addIndex("zjitc").addType("student").build();

try {
    // 执行该索引
    SearchResult result = jestClient.execute(search);
    // 输出JSON格式的结果
    System.out.println(result.getJsonString());
} catch (IOException e) {
    e.printStackTrace();
}

私が見る別のブログの検索式の導入について:Elasticsearch下ミドルウェアドッカー環境のインストールを検索し、基本的な操作を使用(CRUD、条件検索、全文検索、フレーズ検索を、検索をハイライト)
公式文書:Elasticsearch :Definitive Guideの


2、春データElasticsearchを使用して動作

春ブーツ春データElasticsearchの統合でサポートされている非常に便利な検索機能を提供します

最初は輸入に依存しています:

あなたはSpringBoot初期化子でプロジェクトを作成する場合は、春データElasticsearchモジュールを選択します。
ここに画像を挿入説明
プロジェクトは、ウィザードで作成されていない場合は、手動で輸入依存SpringDataElasticsearchにする必要があります。

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

そして、設定パラメータ:

春データElasticsearchのデフォルトが自動的に設定のtransportClientクライアントがされた
情報のconfigure AクラスタノードclusterNodesする必要がありますのclusterNameの
ノード名にもアクセスすることができip:9200ます。データを見るために返された
ここに画像を挿入説明
コンフィギュレーションを:

# 节点名称
spring.data.elasticsearch.cluster-name=docker-cluster
# 使用的是9300端口 并不是使用Http的9200端口通信的
spring.data.elasticsearch.cluster-nodes=111.111.111.111:9300

ここに画像を挿入説明
接続が成功します

起動が失敗したバージョンSpringDataElasticsearchとElasticsearchフィットなくてもよい場合:
ここに画像を挿入説明
ソリューション:
1、アップグレードSpringBootバージョン
2、Elasticsearchの対応バージョンをインストール

エンティティクラスに@Documentインデックス名とタイプ名を指定するための注釈:

// 用@Document注解来指定索引名和类型名
@Document(indexName = "ciczjitc",type = "book")
public class Book {
    private Integer id;
    private String name;
    private String author;

    [getter和setter...]
}

スプリングデータElasticsearchも有効ElasticsearchRepositoryこのインタフェースは、操作Elasticsearch方法の数を定義するインターフェース
長いインターフェースを継承することができる限り

動作するElasticsearchRepositoryサブインターフェイスを書きます

//ElasticsearchRepository泛型:<要存储的类型,主键的类型>
public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
}

最後に、以下を使用します。

クラス注入ElasticsearchRepository:

@Autowired
StudentRepository studentRepository;

インデックスに文書をElasticsearch:

Book book=new Book();
book.setId(1);
book.setName("My life");
book.setAuthor("张涛");
bookRepository.index(book);

ここに画像を挿入説明
成功インデックス


また、ファジークエリをサポートしています。

インターフェイスElasticsearchRepositoryインタフェースを継承したメソッドを追加するには:

public interface BookRepository extends ElasticsearchRepository<Book,Integer> {

    public List<Book> findByNameLike(String name);
}

テスト:

List<Book> books = bookRepository.findByNameLike("life");
for (Book b:books)
{
    System.out.println(b);
}

ここに画像を挿入説明
成功したクエリ

公式ドキュメントを参照するにはより多くの方法:公式文書
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明


公開された177元の記事 ウォンの賞賛5 ビュー39万+

おすすめ

転載: blog.csdn.net/Piconjo/article/details/105298964