Rumah > Java > teks badan

Bagaimana untuk mencari semua medan entiti yang diindeks dalam ElasticSeacrch menggunakan hibernateSearch 6

PHPz
Lepaskan: 2024-02-11 17:15:11
ke hadapan
1194 orang telah melayarinya

editor php Baicao memperkenalkan kaedah untuk menggunakan Hibernate Search 6 untuk mencari semua medan entiti indeks dalam Elasticsearch. Hibernate Search 6 ialah enjin carian teks penuh yang berkuasa yang menyepadukan dengan lancar dengan Elasticsearch. Dengan mengkonfigurasi dan menggunakan Hibernate Search 6, anda boleh mengindeks semua medan entiti dengan mudah ke dalam Elasticsearch dan melaksanakan keupayaan carian teks penuh yang cekap. Artikel ini akan memberi anda butiran tentang cara mengkonfigurasi dan menggunakan Carian Hibernate 6 untuk mencapai matlamat ini. Mengikuti langkah dalam artikel ini, anda akan dapat membina enjin carian teks penuh yang berkuasa dengan cepat dan meningkatkan keupayaan carian aplikasi anda.

Kandungan soalan

Saya mempunyai kaedah berikut untuk mencari dalam elasticsearch menggunakan api carian hibernate. Saya menghantar nilai rentetan pertanyaan sebagai "addresses.address_key:123" yang dicari dalam addresses.address_key seperti yang dinyatakan dalam medan(addresses.address_key).

Cara membuat kaedah ini menerima sebarang input dalam rentetan pertanyaan, contohnya: first_name:john dan buat ia mencari dalam semua medan teks penuh.

versi carian elastik: 8.10 versi hibernatesearch: 6.2.2

public page<employee> searchemployee(string querystring) {
       try {
            searchsession searchsession = search.session(entitymanager);

            searchresult<employee> searchresult = searchsession.search(employee.class)
                    .extension(elasticsearchextension.get())
                    .where(f -> f.simplequerystring().fields("addresses.address_key").matching(querystring))
                    .fetch(math.tointexact(page.getoffset()), page.getpagesize());

            page<employee> pageresult = new pageimpl<>(searchresult.hits(), page, searchresult.total().hitcount());
            return pageresult;
        } catch (searchexception pe) {
           throw pe;
        }
}
Salin selepas log masuk

Kelas entiti diindeks:

@Indexed(index = "employee")
public class Employee {

  @FullTextField(name = "employee_key")
  private String employeeKey;

  @FullTextField(name = "first_name")
  private String firstName;
    
  @IndexedEmbedded(includeEmbeddedObjectId = true, includeDepth = 2)
  private Address addresses;
}

public class Address {
    
  @FullTextField(name = "address_key")
  private String addressKey;

  @FullTextField(name = "street_name")
  private String streetName;

}
Salin selepas log masuk

Penyelesaian

Anda boleh sasarkan berbilang medan secara eksplisit apabila mentakrifkan predikat:

searchresult<employee> searchresult = searchsession.search(employee.class)
        .where(f -> f.simplequerystring()
                .fields("employee_key", "first_name", "addresses.address_key")
                .matching(querystring))
        .fetch(math.tointexact(page.getoffset()), page.getpagesize());
Salin selepas log masuk

Tiada pilihan untuk menyasarkan hanya "semua medan teks" pada masa ini; lihat https://www.php.cn/link/0b36451530d9491114523d4b66253837.

Selain itu, untuk menjadi jelas, sintaks rentetan pertanyaan ringkas tidak menyokong rujukan eksplisit kepada medan dalam rentetan pertanyaan.

Dalam contoh ini:

f.simplequerystring().fields("addresses.address_key")
        .matching("addresses.address_key:123")
Salin selepas log masuk

...Awalan "address.address_key:" ("addresses.address_key:123") dalam rentetan carian tidak mempunyai makna khusus dan hanya akan ditafsirkan sebagai istilah yang terdapat dalam dokumen.

Anda juga boleh menulis seperti ini:

f.simplequerystring().fields("addresses.address_key")
        .matching("addresses.address_key 123")
Salin selepas log masuk

Tetapi sebenarnya, saya rasa apa yang anda mahukan ialah ini:

f.simpleQueryString().fields("addresses.address_key")
        .matching("123")
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mencari semua medan entiti yang diindeks dalam ElasticSeacrch menggunakan hibernateSearch 6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan