2017-03-22 1 views
0

Ich erstelle eine Suchfunktion in meiner Anwendung, die Spring Boot + Hibernate verwendet. Die Datenbank ist MySQL. Ich muss die Suche nach Daten für einige Felder in meiner Entität durchführen. Ich möchte auch eine teilweise Datenübereinstimmung machen, im Wesentlichen was MySQL "LIKE" tut.Mysql 'Like' Suche in Spring Boot und Hibernate

zB: ...

WHERE name LIKE '%searchText%' OR description LIKE '%searchText%'. 

Ich weiß, ich @Query oder findByNameContaining verwenden können. Dies wird jedoch nicht sehr optimiert, da die Daten zunehmen.

habe ich dies als Beispiel zu suchen:

http://blog.netgloo.com/2014/11/23/spring-boot-and-hibernate-search-integration/

Dieser arbeitete für mich für vollständige Daten Spiel in Ordnung. Aber ich kann nicht herausfinden, wie ich das für Teildatenübereinstimmung verwenden kann.

EDIT: Hinzufügen von Beispieldaten und weitere Beschreibung

Beispiel: wenn ich die folgenden Zeilen:

id  | name  | description      | type 

1  | sample  | this is a sample description  | Y 

2  | samples  | this is a description for samples | Y 

3  | not a match | this should not match    | Y 

4  | not a match | this should also not match  | Y 

Ergebnis:

1  | sample  | this is a sample description  | Y 

2  | samples  | this is a description for samples | Y 

Also, wenn ich für die Probe zu suchen, es sollte mit den ersten beiden Zeilen von 'sample' und 'samples' übereinstimmen, und mit mehr Zeilen, wenn der 'sample' Teilstring im Namen oder in der Beschreibung gefunden wird.

Auch möchte ich mehr Felder in Suchklausel hinzufügen. Beispiel: Suche nur die Zeilen, bei denen 'Typ' 'Y' ist

Bitte helfen Sie mir.

Vielen Dank im Voraus.

+0

, was Sie für teilweise Übereinstimmung bedeuten kann .. aktualisieren Sie eine richtige Datenprobe in Frage stellen und fügen und das erwartete Ergebnis – scaisEdge

+0

@scaisEdge hinzugefügt Datenbeispiel – newUser

Antwort

0

können Sie Restriction.ilike mit Restriction.or verwenden und wie Sie bekommen führen wollen:

Criterion cond1= Restrictions.ilike("name","%"+searchText+"%"); 
Criterion cond2= Restrictions.ilike("description", "%"+searchText+"%"); 
criteria.add(Restrictions.or(cond1, cond2)); 
Verwandte Themen