Solr クイック スタート: spring-data-solr を統合してクライアント操作を実現する (10)

0 まえがき

前の章では、公式の solr クライアントを紹介しましたSolrJが、solrJ の使用は比較的不便です。それでも、いくつかの責任あるクライアント操作とステートメントの記述を行う必要があります。より便利な ORM フレームワークはありますか? これについては言及されていspring-data-solrます

1 はじめに

まず、Springデータ関連ツールキットの公式ドキュメントの見方が分からない方のために、統一して説明します。

1. spring-data のすべてのドキュメントは、このパスhttps://docs.spring.io/spring-data/で参照できます。

2. solr を見つけてクリックして入力します

ここに画像の説明を挿入
3. を選択しdocs、つまりドキュメントを選択し、現在のバージョンを選択しますcurrent。指定したバージョンを直接表示したい場合は、バージョン番号に従ってアクセスすることもできます。

ここに画像の説明を挿入
4. 入力後、 を選択しreference、次に を選択するhtmlと、公式ドキュメントを入力できます

Spring-data-solr 公式ドキュメント

ここに画像の説明を挿入

公的文書を上手に活用することで、多くの回り道を避けることができます。この記事では、spring-data-solr の基本的な操作についても簡単に紹介しますが、より多くの用途に使用するには、公式ドキュメントを組み合わせて拡張する必要があります

spring-data-solr使用手順は実際にはgithub のソースコードで説明されていますが、詳細は以下でビルドするのを待ちます。

2.使用する

1.spring-data-solr依存関係を導入し、spring-data-solrバージョンsolr番号との対応関係は以下の通り

スプリングデータソルル ソルル
4.0.x 7.4.0
4.1.x 8.2.0
4.2.x 8.5.1
4.3.x 8.5.2

solr が 7.4 より前のバージョンを使用している場合は、spring-data-solrファイルを表示して対応する関係を確認できます。

ここに画像の説明を挿入
here を使用しているのでsolr8.2.0依存関係を導入します

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

2. 設定ファイルの追加application.properties

spring.data.solr.host=http://192.168.244.41:8983/solr

3. エンティティクラスを作成するOrders

@SolrDocumentここでは以前に示したエンティティを使用しますが、spring-data-solr をバインドする場合は、エンティティ クラスにアノテーションを追加し、それを使用してcollectionコア名を記述する必要があります。

同時に、@Id主キー フィールドと@Indexedインデックス フィールドを示し、name 属性と type 属性はマネージド スキーマで構成されたものと一致します。

@Data
@SolrDocument(collection = "orders")
public class Orders {
    
    

    @Field("id")
    @Id
    @Indexed(name = "id", type = "long")
    private Long id;

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

    @Field("address")
    @Indexed(name = "address", type = "text_general")
    private String address;

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

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

    @Field("status")
    @Indexed(name = "status", type = "int")
    private Integer status;

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

    @Field("create_time")
    @Indexed(name = "create_time", type = "date")
    private Date createTime;

    @Field("labels")
    @Indexed(name = "labels", type = "string")
    private List<String> labels;

}

4.Repository対応するコアの追加、削除、変更、クエリメソッドを宣言するクラスを作成します 使ったことがある人なら、spring-data-es少し馴染みがあると思いますが、実際、この 2 つの使い方は似ています

public interface OrdersRepository extends CrudRepository<Orders, Long> {
    
    
}

CrudRepository には、一般的に使用される多くの追加、削除、変更、クエリ インターフェイスが付属しています。
ここに画像の説明を挿入
ページング クエリを実装したい場合は、ページング インターフェイスを提供する PagingAndSortingRepository を継承する、統合された SolrCrudRepository を使用できます。
ここに画像の説明を挿入

同時に、 spring-data-solr 自体は、公式ドキュメントでも説明されている自己拡張構文をサポートしており、コネクター (AND、OR) とフィールド名を介してインターフェースメソッドを迅速に実装できます。

ここに画像の説明を挿入
spring-data-solr では一般的にサポートされているキーワードの説明は見つかりませんでしたが、spring-data-elasticsearchに記載されています。参照してください。

(注: 以下の文法はすべて spring-data-es でのみ検証されており、spring-data-solr は検証されていません。参考のみです。ここでの Tucao での solr の使用率は es ほど高くありません。 Spring-data が提供する公式ドキュメントとも大きく異なります。多くの es には詳細な説明がありますが、solr にはありません。相互参照でき、多くの内容は共通です)
ここに画像の説明を挿入

ここでは 2 つ書き、同時に継承クラスを次のように変更します。SolrCrudRepository

@Repository
public interface OrdersRepository extends SolrCrudRepository<Orders, Long> {
    
    

    List<Orders> findByAddressOrProductName(String address, String productName);

    List<Orders> findByProductName(String productName);
}

5. スタートアップ クラスにアノテーションを追加して@EnableSolrRepositories(basePackages = "com.example.solrdemo.dao")、リポジトリ クラス (basePackagesリポジトリ クラスのパッケージ パス) のスキャンを開始します。

6. コントローラー層を作成し、テストインターフェイスを作成します。

@RestController
@RequestMapping("orders/data")
public class OrdersDataController {
    
    

    @Autowired
    private OrdersRepository ordersRepository;

    @GetMapping("save2")
    public void save2(Long id){
    
    
        Orders orders = new Orders();
        orders.setId(id);
        orders.setOrderNo("20230601000"+id);
        orders.setAddress("贵州省遵义市");
        orders.setProductName("小米手机");
        orders.setRemarks("送货上门");
        orders.setCreateUser("root");
        orders.setCreateTime(new Date());
        orders.setStatus(1);
        ordersRepository.save(orders);
    }

    @GetMapping("searchByName")
    public List<Orders> searchByName(String productName){
    
    
        return ordersRepository.findByProductName(productName);
    }

    @GetMapping("searchByAddressAndName")
    public List<Orders> search2(String address, String name){
    
    
        return ordersRepository.findByAddressOrProductName(address, name);
    }

}

7. 新しいインターフェイスを呼び出します: http://localhost:8092/orders/data/save?id=10

8. solr-admin のクエリにより、データが正常に追加されたことがわかりました。

ここに画像の説明を挿入

9. クエリインターフェイスを同時にテストします

ここに画像の説明を挿入

ここに画像の説明を挿入

3. 複雑なクエリ

実際、上記のRepositoryインターフェイスは、私たちの単純なインターフェイスの実現にのみ対応できます。実際の運用では、より複雑な文法シナリオが存在する可能性があります。現時点では、組み込みのインターフェイスを使用できますSolrTemplate

1. まず構成クラスを作成し、初期化します。SolrTemplate

@Configuration
public class SolrConfig {
    
    

    @Value("${spring.data.solr.host}")
    private String host;

    @Bean
    public SolrClient solrClient(){
    
    
        return new HttpSolrClient.Builder(host).build();
    }

    @Bean
    public SolrTemplate solrTemplate(){
    
    
        return new SolrTemplate(solrClient());
    }
}

2. solrTemplate はクエリを提供します。最も単純なものでは、Query.queryクエリ ステートメントを構築するだけで済みます。

 @GetMapping("save2")
    public void save2(Long id){
    
    
        Orders orders = new Orders();
        orders.setId(id);
        orders.setOrderNo("20230601000"+id);
        orders.setAddress("贵州省遵义市");
        orders.setProductName("小米手机");
        orders.setRemarks("送货上门");
        orders.setCreateUser("root");
        orders.setCreateTime(new Date());
        orders.setStatus(1);
        solrTemplate.saveBean("orders", orders);
        solrTemplate.commit("orders");
    }

    @GetMapping("search3")
    public Page<Orders> search3(String address, String name){
    
    

        Query query = Query.query("address:"+address+" AND product_name:"+name);

        Page<Orders> orders = solrTemplate.query("orders", query, Orders.class);
        return orders;
    }

ただし、オブジェクトベースの構築メソッドが必要な場合もあります。Query.query メソッド パラメータもオブジェクトをサポートしていることがわかりますCriteria。そのため、次のように構築してクエリを実行することもできます。

ここに画像の説明を挿入

3. 詳しい使用方法は公式ドキュメントで確認できます:
https://docs.spring.io/spring-data/data-solr/docs/current/reference/html/#solr.misc.partialUpdates

ここに画像の説明を挿入

要約する

この記事では、より詳細なSolrTemplate文法を列挙するのではなく、学習の入り口を提供することを目的としています。この記事の目的は、高度な文法を集中的に学習することではなく、基本をマスターして入門に導くことです。より深く、より深い用法は次のとおりです。公式ドキュメントを使って試してみる

プロジェクトのソースコード

この記事のデモのソースコードは次のとおりです: https://gitee.com/wuhanxue/wu_study/tree/master/demo/solr-demo

おすすめ

転載: blog.csdn.net/qq_24950043/article/details/131259481