Ich habe ein Suchfeld, das eine Suche im Titelfeld basierend auf der angegebenen Eingabe durchführt, so dass der Benutzer alle verfügbaren Titel beginnend mit dem Text empfohlen hat Lucene und Hibernate Search. Es funktioniert gut, bis Platz eingegeben wird. Dann verschwindet das Ergebnis. Zum Beispiel möchte ich "Learning H" mir "Learning Hibernate" als Ergebnis geben. Dies geschieht jedoch nicht. Könntest du mir bitte raten, was ich hier stattdessen verwenden soll.Suche nach Feldern mit Wildcard und Leerzeichen in Hibernate Search
Query Builder:
QueryBuilder qBuilder = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(LearningGoal.class).get();
Query query = qBuilder.keyword().wildcard().onField("title")
.matching(searchString + "*").createQuery();
BooleanQuery bQuery = new BooleanQuery();
bQuery.add(query, BooleanClause.Occur.MUST);
for (LearningGoal exGoal : existingGoals) {
Term omittedTerm = new Term("id", String.valueOf(exGoal.getId()));
bQuery.add(new TermQuery(omittedTerm), BooleanClause.Occur.MUST_NOT);
}
@SuppressWarnings("unused")
org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(
query, LearningGoal.class);
Hibernate Klasse:
@AnalyzerDef(name = "searchtokenanalyzer",tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = StandardFilterFactory.class),
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = StopFilterFactory.class,params = {
@Parameter(name = "ignoreCase", value = "true") }) })
@Analyzer(definition = "searchtokenanalyzer")
public class LearningGoal extends Node {
Drucken der Abfrage zur Ausgabe wird definitiv helfen .. – phani
Es ist nützlich, in der Tat, aber half mir nicht zu verstehen, warum ich nicht Resultate haben. Ich habe zum Beispiel ein Lernziel, dessen Titel "Lernwahrscheinlichkeitstheorie" lautet. Die Ausgabe von zwei Abfragen ist ** bQuery: + title: learning p * hibQuery: FullTextQueryImpl (Titel: learning p *) ** für die Eingabezeichenfolge "learning p". Es findet Wert, wenn der Eingabe-String "lernt". –
Ich habe auch versucht, den Raum mit? Zu ersetzen, aber es gab kein Ergebnis. –