Spring Data Couchbaseの複数のバケットと空間ビュークエリ

データ]

  • リンク:/tag/couchbase/[Couchbase]

1前書き

Spring Data Couchbaseに関するこの3番目のチュートリアルでは、複数のバケットにわたるCouchbaseデータモデルをサポートするために必要な設定を説明し、多次元データのクエリにSpatialビューを使用する方法を紹介します。

2データ・モデル

最初のチュートリアル our 2 このチュートリアルのために Campus エンティティを定義します。

@Document
public class Campus {
    @Id
    private String id;

    @Field
    @NotNull
    private String name;

    @Field
    @NotNull
    private Point location;

   //standard getters and setters
}

3複数のCouchbaseバケット用のJava設定

プロジェクトで複数のバケットを使用するには、Spring Data Couchbaseモジュールのバージョン2.0.0以降を使用する必要があります。また、XMLベースの設定は単一のバケットシナリオ

これがMavenの pom.xml ファイルに含まれる依存関係です。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-couchbase</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

3.1. バケットビーンの定義

/spring-data-couchbase[Spring Data Couchbaseの紹介]チュートリアルでは、Spring Dataで使用するデフォルトのCouchbaseバケットの名前として “ baeldung” を指定しました。

Campus エンティティを "baeldung2" バケットに格納します。

2番目のバケットを利用するには、まずCouchbaseの設定クラスで Bucket 自体に @ Bean を定義する必要があります。

@Bean
public Bucket campusBucket() throws Exception {
    return couchbaseCluster().openBucket("baeldung2", "");
}

3.2. テンプレートBeanの設定

次に、このバケットで使用する CouchbaseTemplate @ Bean を定義します。

@Bean
public CouchbaseTemplate campusTemplate() throws Exception {
    CouchbaseTemplate template = new CouchbaseTemplate(
      couchbaseClusterInfo(), campusBucket(),
      mappingCouchbaseConverter(), translationService());
    template.setDefaultConsistency(getDefaultConsistency());
    return template;
}

3.3. リポジトリのマッピング

最後に、 Campus エンティティクラスが新しいテンプレートとバケットを使用し、他のエンティティクラスは引き続きデフォルトのテンプレートとバケットを使用するように、Couchbaseリポジトリ操作のカスタムマッピングを定義します。

@Override
public void configureRepositoryOperationsMapping(
  RepositoryOperationsMapping baseMapping) {
    try {
        baseMapping.mapEntity(Campus.class, campusTemplate());
    } catch (Exception e) {
       //custom Exception handling
    }
}

4空間データまたは多次元データのクエリ

Couchbaseは、 Spatial view と呼ばれる特別な種類のビューを使用して、地理データなどの2次元データに対してバウンディングボックスクエリを実行するためのネイティブサポートを提供します。

バウンディングボックスクエリは、ボックスの最南西最 [x、y] 点を startRange パラメータとして使用し、最北 点を endRange__パラメータとして使用する範囲クエリです。

Spring Dataは、Couchbaseのネイティブバウンディングボックスクエリ機能を、誤検知の一致を排除することを目的としたアルゴリズムを使用して、円と多角形を含むクエリに拡張し、2次元以上のクエリをサポートします。

Spring DataはCouchbaseリポジトリで派生クエリを定義するために使用できるキーワードのセットを通して多次元クエリの作成を単純化します。

4.1. サポートされているデータ型

Spring Data Couchbaseリポジトリクエリは、 Point、Box、Circle、Polygon、 、および Distance など、 org.springframework.data.geo パッケージのデータ型をサポートしています。

4.2. 派生クエリキーワード

標準のSpring Dataリポジトリキーワードに加えて、Couchbaseリポジトリは2つのディメンションを含む派生クエリで以下のキーワードをサポートします。

  • Within InWithin (境界を定義する2つの Point パラメータを取ります

ボックス) ** Near IsNear (パラメータとして Point Distance を取ります)

次のキーワードは、2つ以上のディメンションを含むクエリに使用できます。

  • Between (両方に単一の数値を追加するためのものです。

startRange endRange ) ** GreaterThan、GreaterThanEqual、After (単一の数値を追加するためのものです。

startRange )の値 ** LessThan、LessThanEqual、Before (単一の数値を追加するためのものです。

endRange )へ

これらのキーワードを使用した派生クエリメソッドの例をいくつか示します。

  • findByLocationNear

  • findByLocationWithin

  • findByLocationNearAndPopulationGreaterThan

  • findByLocationWithinAndAreaLessThan

  • findByLocationNearAndTuitionBetween

5リポジトリの定義

Spatialビューを基にしたリポジトリメソッドは、デザインドキュメント名、ビュー名、およびビューのキーを定義するために使用されるディメンション数を指定する @ Dimensional アノテーションで装飾する必要があります(特に指定がない場合はデフォルトの2)。

5.1. CampusRespositoryインタフェース

ここでは、 CampusRepository インターフェースで、2つのメソッドを宣言しています。1つはMapReduceビューに支えられた従来のSpring Dataキーワードを使用するもの、もう1つはSpatialビューに支えられたディメンションのSpring Dataキーワードを使用するものです。

public interface CampusRepository extends CrudRepository<Campus, String> {

    @View(designDocument="campus", viewName="byName")
    Set<Campus> findByName(String name);

    @Dimensional(dimensions=2, designDocument="campus__spatial",
      spatialViewName="byLocation")
    Set<Campus> findByLocationNear(Point point, Distance distance);
}

5.2. 空間ビュー

MapReduceビューとよく似た、空間ビューはJavaScript関数として書かれています。 map 関数と reduce 関数の両方で構成されるMapReduceビューとは異なり、Spatialビューは spatial 関数のみで構成されているため、MapReduceビューと同じCouchbase設計ドキュメントに共存することはできません。

Campus エンティティに対して、 “ byLocation” という名前のSpatialビューを含む “ campus spatial” __という名前のデザインドキュメントを次の関数で作成します。

function (doc) {
  if (doc.location &&
      doc.__class == "org.baeldung.spring.data.couchbase.model.Campus") {
    emit([doc.location.x, doc.location.y], null);
  }
}

この例が示すように、Spatialビュー関数を作成するときは、 emit 関数呼び出しで使用されるキーは2つ以上の値の配列でなければなりません。

5.3. MapReduceビュー

リポジトリを完全にサポートするには、2つのMapReduceビューを含む “ campus” という名前の設計文書を作成する必要があります。 “ all” “ byName”

これは “ all” ビューのマップ関数です。

function (doc, meta) {
  if(doc.__class == "org.baeldung.spring.data.couchbase.model.Campus") {
    emit(meta.id, null);
  }
}

これが “ byName” ビューのマップ関数です。

function (doc, meta) {
  if(doc.__class == "org.baeldung.spring.data.couchbase.model.Campus" &&
     doc.name) {
    emit(doc.name, null);
  }
}

6. 結論

Spring Data Couchbaseプロジェクトで複数のバケットの使用をサポートするように設定する方法を示し、リポジトリ抽象化を使用して多次元データに対する空間ビュークエリを作成する方法を説明しました。

このチュートリアルの完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-couchbase-2[the github project]で見ることができます。

Spring Data Couchbaseの詳細については、公式のhttp://projects.spring.io/spring-data-couchbase/[Spring Data Couchbase]プロジェクトサイトを参照してください。