Pengenalan kepada Spring Data Solr

1. Gambaran keseluruhan

Dalam artikel ini, kita akan meneroka asas-asas Spring Data Solr secara praktikal.

Apache Solr adalah sumber terbuka yang siap untuk menggunakan enjin carian teks penuh perusahaan. Anda boleh mengetahui lebih lanjut mengenai ciri Solr di laman web rasmi.

Kami akan menunjukkan cara melakukan konfigurasi Solr yang sederhana dan tentu saja cara berinteraksi dengan pelayan.

Pertama, kita perlu memulakan pelayan Solr dan membuat inti untuk menyimpan data (yang, secara lalai, Solr akan dibuat dalam mod tanpa skema).

2. Data Spring

Sama seperti projek Spring Data lain, Spring Data Solr mempunyai tujuan yang jelas untuk membuang kod plat boiler, yang pasti akan kita manfaatkan.

2.1. Ketergantungan Maven

Mari mulakan dengan menambahkan pergantungan Spring Data Solr ke pom.xml kami :

 org.springframework.data spring-data-solr 2.0.5.RELEASE 

Anda boleh mendapatkan pergantungan terkini di sini.

2.2. Mendefinisikan Dokumen

Mari tentukan dokumen yang dipanggil Produk :

@SolrDocument(solrCoreName = "product") public class Product { @Id @Indexed(name = "id", type = "string") private String id; @Indexed(name = "name", type = "string") private String name; }

Anotasi @SolrDocument menunjukkan bahawa kelas Produk adalah dokumen Solr dan diindeks ke produk bernama inti . Medan yang dijelaskan dengan @Indexed diindeks dalam Solr dan akan dicari.

2.3. Menentukan Antaramuka Repositori

Seterusnya, kita perlu membuat antara muka repositori dengan memperluas repositori yang disediakan oleh Spring Data Solr. Kami secara semula jadi akan mempoletikannya dengan Product and String sebagai id entiti kami:

public interface ProductRepository extends SolrCrudRepository { public List findByName(String name); @Query("id:*?0* OR name:*?0*") public Page findByCustomQuery(String searchTerm, Pageable pageable); @Query(name = "Product.findByNamedQuery") public Page findByNamedQuery(String searchTerm, Pageable pageable); }

Perhatikan bagaimana kita menentukan tiga kaedah di sini, di atas API yang disediakan oleh SolrCrudRepository . Kami akan membincangkannya dalam beberapa bahagian seterusnya.

Juga ambil perhatian bahawa Product.findByNamedQuery harta ditakrifkan dalam Solr dinamakan fail Pertanyaan solr-named-queries.properties dalam folder classpath yang:

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

2.4. Konfigurasi Java

Sekarang kita akan meneroka konfigurasi Spring dari ketekunan Solr:

@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("//localhost:8983/solr"); } @Bean public SolrTemplate solrTemplate(SolrClient client) throws Exception { return new SolrTemplate(client); } }

Kami menggunakan @EnableSolrRepositories untuk mengimbas pakej repositori. Perhatikan bahawa kami telah menentukan lokasi fail sifat pertanyaan bernama dan mengaktifkan sokongan berbilang teras.

Sekiranya multi-core tidak diaktifkan, maka secara automatik Spring Data akan menganggap bahawa konfigurasi Solr adalah untuk satu teras. Kami mengaktifkan pelbagai teras di sini, hanya untuk rujukan.

3. Pengindeksan, Pengemaskinian dan Pemadaman

Untuk mencari dokumen di Solr, dokumen harus diindeks ke repositori Solr.

Contoh berikut mengindeks dokumen produk di repositori Solr hanya dengan menggunakan kaedah menyimpan SolrCrudRepository :

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

Sekarang mari kita dapatkan dan kemas kini dokumen:

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

Dokumen boleh dihapus dengan hanya memanggil kaedah hapus:

productRepository.delete(retrievedProduct);

4. Membuat pertanyaan

Sekarang mari kita terokai pelbagai teknik pertanyaan yang disediakan oleh Spring Data Solr API.

4.1. Kaedah Kaedah Penjanaan Pertanyaan

Pertanyaan berdasarkan nama kaedah dihasilkan dengan menghuraikan nama kaedah untuk menghasilkan permintaan yang diharapkan untuk dilaksanakan:

public List findByName(String name);

Di antara muka repositori kami, kami mempunyai kaedah findByName yang menghasilkan pertanyaan berdasarkan nama kaedah:

List retrievedProducts = productRepository.findByName("Phone");

4.2. Pertanyaan Dengan Anotasi @Query

Pertanyaan carian solr dapat dibuat dengan meminta pertanyaan dalam anotasi @Query kaedah. Dalam contoh kami findByCustomQuery diberi keterangan dengan @Query anotasi:

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

Mari gunakan kaedah ini untuk mendapatkan dokumen:

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

Dengan memanggil findByCustomQuery ("Phone", PageRequest baru (0, 10)) kami memperoleh halaman pertama dari dokumen produk yang berisi kata "Phone" di mana-mana id atau namanya .

4.3. Pertanyaan Dinamakan

Pertanyaan dinamakan mirip dengan pertanyaan dengan anotasi @Query kecuali pertanyaan dinyatakan dalam fail sifat berasingan:

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

Perhatikan bahawa anotasi @Query tidak diperlukan jika kunci ( findByNamedQuery ) pertanyaan dalam fail sifat sepadan dengan nama kaedah.

Mari dapatkan beberapa dokumen menggunakan kaedah pertanyaan bernama:

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

5. Kesimpulan

Artikel ini adalah pengenalan cepat dan praktikal untuk Spring Data Solr, yang merangkumi konfigurasi asas, menentukan repositori dan membuat pertanyaan secara semula jadi.

Dan seperti biasa, contoh yang digunakan di sini boleh didapati sebagai contoh projek di Github.