/ / Frühlingsdaten + Mongo case-insensitieve Textsuche - Java, Mongodb, Frühlingsdaten, Frühlingsdaten-Mongodb

Spring Data + Mongo case-insensitieve Textsuche - java, mongodb, spring-data, spring-data-mongodb

Ich versuche, unter Verwendung von Spring-Datenrepositorys eine Suche nach case-unempfindlichem Text über mehrere Felder in Mongodb zu implementieren. Ich habe 2 Lösungen gefunden, die jeweils einige Nachteile haben:

  1. Regex verwenden:

    @Query("{"status": "ACTIVE", $or: [{"title": {$regex : ?0, $options: "i"}}, {"location.text": {$regex : ?0, $options: "i"}}]}")
    Page<Article> findAllActiveBySearchString(String search, Pageable pageable);
    

Eine solche Abfrage schlägt bei den Zeichenfolgen "/", "*" fehl und wird zurückgegebenalle Einträge auf ".", also muss ich diese Zeichen umgehen oder irgendwie filtern, aber ich weiß auch nicht, wie viele solche Abfragen existieren könnten. Meine Frage ist also So stellen Sie zu 100% sicher, dass die Abfrage eine Suche durchführt, bei der jedes Zeichen als einfaches, nicht spezielles Zeichen behandelt wird.

  1. Wenn Sie $ text index verwenden, muss dieser Index zuvor erstellt werden (kein Problem). Lösung hat auch eine bessere Leistung, nicht wahr?

    @Query("{"status": "ACTIVE", $text: {$search: ?0}}")
    Page<Article> findAllActiveBySearchString(String search, Pageable pageable);
    

Ich frage mich, dass die Groß- und Kleinschreibung nicht beachtet wird. Deshalb muss ich ein spezielles Feld mit Kleinbuchstaben erstellen und es indizieren. ist das nur möglich, um mein ziel zu erreichen, oder habe ich etwas verpasst?

Antworten:

0 für die Antwort № 1

MongoDb ist nicht für die Volltextsuche optimiert. Sie müssen sich also mit der Einschränkung auseinandersetzen oder eine andere Suchmaschine wie elasticsearch oder solr verwenden.

Intern tun diese dasselbe, was Sie tun. Verwenden Sie zum Beispiel verschiedene Analysegeräte wie Kleinbuchstaben, Stoppwortfilter, Wortstamm oder N-Gramm-Analyse für die Fuzzy-Suche.

Wenn Sie sich an MongoDb halten möchten, müssen Sie diese Funktionen selbst schreiben und indizieren.