2010-03-21 13 views
9

Ich habe einen Lucene-Index, der zur Zeit die Groß- und Kleinschreibung berücksichtigt. Ich möchte die Option Option von einer Suche ohne Groß- und Kleinschreibung als ein Fallback hinzufügen. Dies bedeutet, dass Ergebnisse, die mit dem Fall übereinstimmen, stärker gewichtet werden und zuerst angezeigt werden. Wenn beispielsweise die Anzahl der Ergebnisse auf 10 begrenzt ist und es 10 Übereinstimmungen gibt, die meinem Fall entsprechen, ist dies ausreichend. Wenn ich nur 7 Ergebnisse gefunden habe, kann ich 3 weitere Ergebnisse aus der Suche ohne Berücksichtigung der Groß- und Kleinschreibung hinzufügen.Lucene case sensitive & insensitive search

Mein Fall ist eigentlich komplexer, da ich Gegenstände mit unterschiedlichen Gewichten habe. Idealerweise wird eine gewisse Übereinstimmung mit einem "falschen" Fall hinzugefügt. Unnötig zu sagen, dass ich keine doppelten Ergebnisse möchte.

Ein möglicher Ansatz besteht darin, 2 Indizes zu haben. Eins mit und eins ohne und beide suchen. Natürlich gibt es hier eine gewisse Redundanz, da ich zweimal indexieren muss.

Gibt es eine bessere Lösung? Ideen?

+0

haben Sie CopyField versucht? siehe http://wiki.apache.org/solr/SchemaXml – Karussell

Antwort

6

Haben Sie CopyField bereits ausprobiert? siehe http://wiki.apache.org/solr/SchemaXml#Copy_Fields

Wenn kein neues Feld B mit einer anderen Konfiguration definieren und kopieren Feld A in B über copyField

+3

Nun, CopyField ist ein Solr-Feature und ich benutze blanke Lucene. Ich kann jedoch ein zusätzliches Feld mit dem gleichen indizierten Text in Kleinbuchstaben hinzufügen. Dies ist viel besser als das Erstellen eines vollständig separaten Index, also +1. – zvikico

+0

ups, ok. Ich hatte genau das selbe Problem, habe aber mit solr gearbeitet. Ich habe diese Antwort ein wenig zu schnell hinzugefügt. – Karussell

+0

Ich bin bereits mit dem zusätzlichen Feld beschäftigt, also hat deine Antwort mich in die richtige Richtung gebracht. Das war alles was ich brauchte. Danke noch einmal. Ich werde es offen halten, um zu sehen, ob ich effizientere Lösungen bekommen kann. – zvikico

5

Die Lucene-Suche ist Groß- und Kleinschreibung, es ist nur, dass alle Eingaben in der Regel ist untere Gefasste Nach dem Passieren von QueryParser, so fühlt es sich an wie case insensitive. Mit anderen Worten, nicht Kleinbuchstaben Ihre Eingabe vor Indizierung, und nicht in Kleinbuchstaben Ihre Abfragen (z. B. wählen Sie einen Analyzer, nicht Kleinbuchstaben) Keyword-Analyzer zum Beispiel.

[setLowercaseExpandedTerms][1](boolean lowercaseExpandedTerms) 

Sie Index können die Begriffe Groß- und Kleinschreibung-Analyzer und wenn u Groß- und Kleinschreibung Abfrage eine Klasse verwenden möchten, die Ihren Bedingungen

Blick auf Wildcard, Präfix und Fuzzy-Abfragen konvertieren doesnot Kleinbuchstaben

+0

Natürlich führt die Verwendung eines Groß-/Kleinschreibungs-Analysators mit einer Abfrage für weniger Sorgfalt nicht zu den korrekten Ergebnissen. – zvikico

+0

können Sie das selbe mit sqlite oder mysql tun? – Naveen

+1

@Naveen: sqlite und mysql haben volle Datenbank-Engine, was ist Ihre Frage? – Narayan