2009-12-29 15 views
22

Ich bin mit Apache Solr Suchmaschine für meine Website Datenbank Indizierung ..Apache Solr Such Teil des Wortes

Ich bin mit django + http://haystacksearch.org/

Also lassen Sie uns sagen, dass ich Dokument haben, das Wort „Chicken haben "

Als ich nach‚chicken‘- solr kann dieses Dokument findet

Aber wenn ich suche‚Küken‘- es hat nichts finden ..

Gibt es eine Möglichkeit, das zu beheben?

Antwort

18

Hinweis: Die folgende Lösung ist Solr 1.4 (und höher) spezifisch!

Für mehr Flexibilität würde ich empfehlen, Ihre Daten mit der NGramTokenizerFactory zu indexieren, um die Platzhalter-Suche vor und zurück zu vervollständigen. Wenn Sie nur nach Teilstrings am Anfang oder Ende der Zeichenfolge suchen möchten, verwenden Sie die EdgeNGramTokenizerFactory.

Hier ist ein direkter Ersatz des Textfeldtypen, die Ihren Bedarf empfangen würden:

<fieldType name="text" class="solr.TextField" > 
<analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 
+0

solr 1.5 - ist diese Entwicklungsversion? (nicht freigegeben?) –

+1

gibt es eine Lösung wie diese für 1.4? –

+0

Guter Haken: Ich korrigierte die Antwort zu reflektieren 1.4 – Brian

7

Wenn du alle Wörter finden möchtest, die mit chick beginnen, suche nach chick *.

+0

Ich kann \ * chick \ * nicht verwenden? ist es möglich? –

+0

@soundar, Das ist ein ** schlechtes ** Küken;) Du kannst * vor dem Suchwort nicht haben, Lucene unterstützt das nicht. –

4

Wenn ich verwendet habe,

<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 

zur Herstellung von Wildcard-Suche von Brians Antwort, Solr Indizierungszeit dramaticly erhöht. In mehr als 20 mal! Die andere Entscheidung des Wildcard-Suche Problem fand ich hier:

http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/

Sie müssen nur Filter

<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" /> 

(Standard tokenizer - solr.WhitespaceTokenizerFactory in Indexblock von Fieldtype) hinzuzufügen. Für mich war das Ergebnis gleich mit weniger Systemkosten.

0

Ich habe keine Konfiguration geändert. Ich benutze nur Sterne vorne und hinten in meinem SearchString: * Chicke * (ohne Leerzeichen am Ende -> es ist wegen SO Formatierungswort so kursiv, wenn Sie * am Anfang und am Ende verwenden)