So suchen Sie Felder mit Platzhalter und Leerzeichen in Hibernate Search

Habe ich ein Suchfeld, führt eine Suche auf den Titel des Felds basierend auf der gegebenen Eingabe, so dass der Benutzer hat empfohlen, alle verfügbaren Titel, beginnend mit dem text eingefügt.Es basiert auf Lucene und Hibernate Suchen. Es funktioniert gut, bis Leerzeichen eingegeben wird. Dann wird das Ergebnis verschwinden. Zum Beispiel, ich möchte "Lernen H" gebt mir, "Lernen Hibernate" als Ergebnis. Dies bedeutet jedoch nicht passieren. könnten Sie bitte beraten Sie mich was soll ich hier anstelle.

Abfrage-Generator:

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 Sie die Abfrage zur Ausgabe wird Ihnen definitiv helfen..
  • Es ist nützlich, in der Tat, aber nicht mir helfen zu verstehen, warum ich keine Ergebnisse habe. Ich habe zum Beispiel Lernziel, dessen Titel "Lernen von Wahrscheinlichkeitstheorie". Die Ausgabe von zwei Abfragen bQuery:+title:lernen p* hibQuery:FullTextQueryImpl(Titel:learning p*) for input string "lernen p". Findet es Wert, wenn der input-string ist "lernen".
  • Ich habe auch versucht zu ersetzen Leerzeichen mit ?, aber es gab nicht das Ergebnis.
Schreibe einen Kommentar