Machen lucene alle Begriffe in einem Feld als einzelner Begriff behandeln

StackOverflow https://stackoverflow.com/questions/606576

  •  03-07-2019
  •  | 
  •  

Frage

In meinem Lucene Dokument habe ich ein Feld „Firma“, wo der Firmenname Token versehen ist. Ich brauche die tokenization für einen bestimmten Teil meiner Anwendung. Aber für diese Abfrage muss ich in der Lage sein, eine PrefixQuery über das gesamte Unternehmen Bereich zu schaffen.

Beispiel:

  • Meine Marke
    • mein
    • Marke
  • Brahmane Bauernhof
    • Brahmanen
    • Bauernhof

Sie regelmäßig für „bra“ Abfrage würde beiden Dokumente zurückgeben, weil sie beide einen Begriff haben mit BH beginnen.
Das Ergebnis, das ich allerdings will, würde nur den letzten Eintrag zurück, weil der erste Term mit BH beginnt.

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Verwenden Sie einen SpanQuery suchen, nur die erste Term Position. Ein PrefixQuery umwickelt von SpanMultiTermQueryWrapper von SpanPositionRangeQuery gewickelt:

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>

Andere Tipps

Erstellen Sie ein weiteres indiziertes Feld, in dem der Firmenname ist nicht Token versehen. Bei Bedarf sucht auf diesem Gebiet eher als der Zeichen übersetzt Firmenname Feld.


Wenn Sie schnelle Suche wollen, müssen Sie Indexeinträge haben, die direkt an den Aufzeichnungen von Interesse zeigen. Es könnte etwas sein, das Sie mit den Näherungsdaten zu können Datensätze filtern, aber es wird langsam sein. Ich sehe das Problem so: Wie kann eine „enthält“ Abfrage über einen vollständigen Bereich effizient durchgeführt werden

Das könnte Sie der Lage sein, den Anstieg der Indexgröße zu minimieren, indem sie (für jedes aktuelle Feld) eine „erste Begriff“ Feld und „Restlaufzeiten“ Feld zu schaffen. Dies würde die Vervielfältigung der ersten Amtszeit in zwei Bereichen beseitigen. Für „normale“ Abfragen, suchen Sie für die Suche nach Begriffen in einem dieser Felder. Für „starts“ Abfragen suchen Sie nur die „erste Begriff“ Feld. Aber dies scheint wie mehr Mühe, als es wert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top