Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Java So durchsuchen Sie alle Felder einer indizierten Entität in ElasticSeacrch mit hibernateSearch 6

So durchsuchen Sie alle Felder einer indizierten Entität in ElasticSeacrch mit hibernateSearch 6

Feb 11, 2024 pm 05:15 PM

Der

php-Editor Baicao führt eine Methode ein, mit der Hibernate Search 6 alle Felder von Indexentitäten in Elasticsearch durchsuchen kann. Hibernate Search 6 ist eine leistungsstarke Volltextsuchmaschine, die sich nahtlos in Elasticsearch integriert. Durch die Konfiguration und Verwendung von Hibernate Search 6 können Sie alle Felder einer Entität problemlos in Elasticsearch indizieren und effiziente Volltextsuchfunktionen implementieren. In diesem Artikel erfahren Sie, wie Sie Hibernate Search 6 konfigurieren und verwenden, um dieses Ziel zu erreichen. Wenn Sie die Schritte in diesem Artikel befolgen, können Sie schnell eine leistungsstarke Volltextsuchmaschine erstellen und die Suchfunktionen Ihrer Anwendung verbessern.

Frageninhalt

Ich habe die folgende Methode, um in Elasticsearch mithilfe der Hibernate-Such-API zu suchen. Ich übergebe den Abfragezeichenfolgenwert als „addresses.address_key:123“, der in „adresses.address_key“ gesucht wird, wie in den Feldern (addresses.address_key) angegeben.

So veranlassen Sie diese Methode, alle Eingaben in der Abfragezeichenfolge zu akzeptieren, zum Beispiel: Vorname:John und lassen Sie es in allen Volltextfeldern suchen.

elasticsearch-Version: 8.10 Hibernatesearch-Version: 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;
        }
}
Nach dem Login kopieren

Indizierte Entitätsklasse:

@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;

}
Nach dem Login kopieren

Workaround

Sie können mehrere Felder gezielt ansprechen , wenn Sie ein Prädikat definieren:

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());
Nach dem Login kopieren

Es gibt derzeit keine Option, nur auf „alle Textfelder“ abzuzielen; siehe https://www.php.cn/link/0b36451530d9491114523d4b66253837.

Außerdem unterstützt die einfache Abfragezeichenfolgensyntax keinen expliziten Verweis auf Felder in der Abfragezeichenfolge.

In diesem Beispiel:

f.simplequerystring().fields("addresses.address_key")
        .matching("addresses.address_key:123")
Nach dem Login kopieren

...Das Präfix „addresses.address_key:“ („addresses.address_key:123“) in der Suchzeichenfolge hat keine spezifische Bedeutung und wird nur als der im Dokument gefundene Begriff interpretiert.

Du könntest genauso gut so schreiben:

f.simplequerystring().fields("addresses.address_key")
        .matching("addresses.address_key 123")
Nach dem Login kopieren

Aber eigentlich denke ich, was Sie wollen, ist Folgendes:

f.simpleQueryString().fields("addresses.address_key")
        .matching("123")
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo durchsuchen Sie alle Felder einer indizierten Entität in ElasticSeacrch mit hibernateSearch 6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)