データ]


1概要

この記事では、Spring Data Solrの基本を実用的な方法で探求します。

Apache Solrは、エンタープライズ全文検索エンジンを展開するためのオープンソースです。 Solrの機能の詳細については、http://lucene.apache.org/solr/resources.html[公式Webサイト]を参照してください。

簡単なSolr設定の方法と、もちろんサーバーとのやり取り方法を説明します。

まず、Solrサーバを起動し、データを格納するためのコアを作成する必要があります(デフォルトでは、Solrはスキーマレスモードで作成します)。


2春のデータ

他のSpring Dataプロジェクトと同様に、Spring Data Solrには定型コードを削除するという明確な目標があります。

** 2.1. メーベン依存

**

Spring Data Solr依存関係を

pom.xml

に追加することから始めましょう。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-solr</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

最新の依存関係はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.data%22%20AND%20a%3A%22spring-data-solr%22にあります。[ここに]。


2.2. 文書の定義


Product

というドキュメントを定義しましょう。

@SolrDocument(solrCoreName = "product")
public class Product {

    @Id
    @Indexed(name = "id", type = "string")
    private String id;

    @Indexed(name = "name", type = "string")
    private String name;

}


@ SolrDocument

アノテーションは、

Product

クラスがSolrドキュメントであり、

product

という名前のコアにインデックスが付けられていることを示します。

@ Indexed

で注釈が付けられたフィールドはSolrでインデックスされ、検索可能になります。


2.3. リポジトリインタフェースの定義

次に、Spring Data Solrが提供するリポジトリを拡張してリポジトリインターフェイスを作成する必要があります。エンティティIDとして

Product



String

を使用して、これを自然にパラメータ化します。

public interface ProductRepository extends SolrCrudRepository<Product, String> {

    public List<Product> findByName(String name);

    @Query("id:** ?0**  OR name:** ?0** ")
    public Page<Product> findByCustomQuery(String searchTerm, Pageable pageable);

    @Query(name = "Product.findByNamedQuery")
    public Page<Product> findByNamedQuery(String searchTerm, Pageable pageable);

}


SolrCrudRepository

が提供するAPIに加えて、ここで3つのメソッドを定義していることに注目してください。これらについては、次の数セクションで説明します。

また、

Product.findByNamedQuery

プロパティーは、クラスパスフォルダー内のSolrという名前の照会ファイル

solr-named-queries.properties

に定義されています。

Product.findByNamedQuery=id:** ?0**  OR name:** ?0**


2.4. Javaの設定

それでは、Solr永続化レイヤのSpring構成について説明します。

@Configuration
@EnableSolrRepositories(
  basePackages = "com.baeldung.spring.data.solr.repository",
  namedQueriesLocation = "classpath:solr-named-queries.properties",
  multicoreSupport = true)
@ComponentScan
public class SolrConfig {

    @Bean
    public SolrClient solrClient() {
        return new HttpSolrClient("http://localhost:8983/solr");
    }

    @Bean
    public SolrTemplate solrTemplate(SolrClient client) throws Exception {
        return new SolrTemplate(client);
    }
}

パッケージをスキャンしてリポジトリを探すために

@ EnableSolrRepositories

を使用しています。名前付きクエリプロパティファイルの場所を指定し、マルチコアサポートを有効にしました。

マルチコアが有効になっていない場合、デフォルトではSpring DataはSolr設定がシングルコア用であると見なします。参考までに、ここではマルチコアを有効にしています。


3索引付け、更新、および削除

Solrで文書を検索するには、文書をSolrリポジトリーに索引付けする必要があります。

次の例では、__SolrCrudRepositoryのsaveメソッドを使用して、Solrリポジトリ内の製品ドキュメントにインデックスを付けます。

Product phone = new Product();
phone.setId("P0001");
phone.setName("Phone");
productRepository.save(phone);

それでは、ドキュメントを取得して更新しましょう。

Product retrievedProduct = productRepository.findOne("P0001");
retrievedProduct.setName("Smart Phone");
productRepository.save(retrievedProduct);

文書は単にdeleteメソッドを呼び出すことで削除できます。

productRepository.delete(retrievedProduct);


4問い合わせ中

それでは、Spring Data Solr APIによって提供されるさまざまなクエリ手法を調べてみましょう。


4.1. メソッド名クエリ生成

メソッド名ベースのクエリは、メソッド名を解析して、実行する予想クエリを生成することによって生成されます。

public List<Product> findByName(String name);

私たちのリポジトリインターフェースには、メソッド名に基づいてクエリを生成する

findByName

メソッドがあります。

List<Product> retrievedProducts = productRepository.findByName("Phone");


4.2.

@ Query

アノテーション

でクエリする

メソッドの

@ Query

アノテーションにクエリを含めることで、Solr検索クエリを作成できます。この例では、

findByCustomQuery



@ Query

アノテーションを付けています。

@Query("id:** ?0**  OR name:** ?0** ")
public Page<Product> findByCustomQuery(String searchTerm, Pageable pageable);

このメソッドを使って文書を取得しましょう:

Page<Product> result
  = productRepository.findByCustomQuery("Phone", new PageRequest(0, 10));


findByCustomQuery(“ Phone”、new PageRequest(0、10))

を呼び出すことで、

id

または

name

のいずれかのフィールドに“ Phone”という単語を含む製品ドキュメントの最初のページを取得します。


4.3. 名前付きクエリ

名前付きクエリは、クエリが別のプロパティファイルで宣言されることを除いて、

@ Query

アノテーションを持つクエリと似ています。

@Query(name = "Product.findByNamedQuery")
public Page<Product> findByNamedQuery(String searchTerm, Pageable pageable);

プロパティファイル内のクエリのキー(

findByNamedQuery

)がメソッド名と一致する場合は、

@ Query

アノテーションは不要です。

名前付きクエリメソッドを使用していくつかのドキュメントを取得しましょう。

Page<Product> result
  = productRepository.findByNamedQuery("one", new PageRequest(0, 10));


5結論

この記事はSpring Data Solrの簡単で実用的な入門書で、基本的な構成、リポジトリーの定義、および自然な照会について説明しています。

そしていつものように、ここで使われている例はhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-solr[Github上のサンプルプロジェクト]として入手可能です。