2017-07-12 3 views
1

Ich habe 2 docs in meinem Apache Solr mit folgenden Werten von FeldApache Solr Boolesche Suche 100% Match

custom_value: haris mehmood 

custom_value: hari mehmood 

Ich versuche, eine Boolesche Suche zu tun und mit dismax und meine Frage ist +haris, das tue ich das folgende:

defType=dismax & mm=100% & ps=0 & q=+haris & wt=json 

PS: habe ich mich Leerzeichen in Query-String für ein besseres Verständnis

ich nur Ich möchte wissen, was ist es, dass ich falsch mache und wenn nicht, gibt es einen Weg, um zu erreichen, was ich will. Ich möchte wissen, was es ist, dass ich falsch mache, und wenn nicht, ist es ein Weg, zu erreichen, was ich will.

+1

Was der Feldtyp von 'custom_value' ist? –

+0

@AshrafulIslam sein 'text_en' –

+0

Warum verwenden Sie nicht' den Standard-Abfrage-Parser'? –

Antwort

1

Wenn Sie nicht-englischen Text in dieser Abfrage/Feld behandeln möchten, verwenden Sie eine andere Analyse, keine englischen Sprachkram.

text_de tut wahrscheinlich einige stemming und die s in 'haris' wird entfernt, so dass es Ihre Abfrage entspricht.

+0

Hmm, das könnte richtig sein, denn wenn ich '+ haria' statt' + haris' gebe, gibt es kein doc zurück –

+0

Das ist tatsächlich die richtige Antwort. Vielen Dank! –

1

Sie verwenden Feldtyp text_en. Es hat einen Filter Porter Stem Filter, der Ihr Wort stemming und entfernen Sie die nachfolgende s.

Erstellen Sie einen neuen Feldtyp ohne Porter Stem Filter

<fieldType name="text_simple" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <!-- Case insensitive stop word removal. 
    --> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
     /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
    /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    </analyzer> 
</fieldType> 

Und Ihren Feldtyp zu text_simple ändern und den Kern neu zu laden und indizieren Daten