2016-05-13 16 views
3

Ich möchte "john doe" mit "hn do" Suche finden. "*hn*" oder "john\ d\*" funktioniert, aber wenn Abfrage Whitespace enthält, funktioniert "*hn\ do*" nicht. Fluchtende Wildcards, die auch nicht helfen.Solr Teilstringsuche mit Leerzeichen

Meine Felddefinition wie folgt:

<fieldType name="string" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <!--<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" side="back" />--> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Antwort

2

Versuchen NGramTokenizerFactory verwenden. Es wird N-Gramm-Token von Größen in dem angegebenen Bereich generiert. Wie unten

<analyzer> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="10"/> 
</analyzer> 

Es werden Werke wie:

In: "john doe" 
Out: "jo","joh","john", "john ","john d","john do", 
"john doe", "oh", "ohn","ohn ", "ohn d"... 

Und die KeywordTokenizerFactory aus der fieldType Definition entfernen.

können Sie auch denken solr.EdgeNGramTokenizerFactory

der Verwendung Es side ein anderes Attribut hat.

side: ("front "oder" back", Standard ist "front"), ob das n-Gramm von Anfang an (front) des Textes oder von dem Ende (back)

Es wird zu berechnen arbeitet als:

In: "babaloo" 
Out: "oo", "loo", "aloo", "baloo" 

KeywordTokenizerFactory: Dieses tokenizer behandelt das gesamte Textfeld als ein einziges Token.