2016-04-28 22 views
0

Angenommen, ich suche in solr mit dem Schlüsselwort IPL, will ich Ergebnisse, die sowohl IPL als auch #IPL beinhalten. Wie erreiche ich das?Suche in Solr mit auch Hashtag inklusive

Ich versuchte WordDelimFactory wie folgt unten im Index und Abfrage, aber nicht funktioniert .

Ich denke, ich muss die Zeichenfolge in "String" und "#string" teilen, aber ich weiß nicht, wie das geht.

Antwort

0

wenn Sie jeden keryword wollen als #keyword suchen, dann können Sie versuchen, mit OR-Operator in Abfrage wie

/select?q="IPL" OR "#IPL" 

, wenn Sie in bestimmten Feld suchen möchten dann

/select?q=title:"IPL" OR title:"#IPL" 

Sie können versuchen, mit Synonymen. Aber in diesem Fall ist es nur # vorangestellt.

gehen Sie zu Ihren Konfigurationsdateien der Solr-Instanz. Innerhalb des Conf-Ordners bearbeiten Sie die Datei synonyms.txt.

IPL => #IPL

ODER

Änderung Ihrer Abfragefeld tokenizer in schema.xml Datei,

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

dann mit Feldnamen abfragen /select?q=text:#IPL

da in solr Text ist Standard können Sie einfach versuchen /select?q=#IPL

+0

Ich möchte dies für alle Suchbegriffe nicht nur IPL tun. Wie konfiguriert man so in synonyms.txt? – Babu

+0

Ihr Abfragebegriff wird in Token umgewandelt. solr.StandardTokenizerFactory löscht # von Ihrem Keyword. – vinod

+0

ist mit whitespacefactory \t \t < Filter class = "solr.LowerCaseFilterFactory" /> \t \t \t \t Babu

0

Dies geschieht mit der WordDelimiterFilterFactory. Set generateWordParts=1. Halten Sie auch preserveOriginal = 1. Dies wird das Original behalten und ohne die # neu erstellen.

Nach dem Ändern der schema.xml den Server neu starten und die Daten neu indizieren.

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
<analyzer> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 

     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.WordDelimiterFilterFactory" 
       protected="protwords.txt" 
       generateWordParts="1" 
       generateNumberParts="1" 
       catenateWords="1" 
       catenateNumbers="1" 
       catenateAll="0" 
       splitOnCaseChange="0" 
       preserveOriginal="1"/> 
     <filter class="solr.LengthFilterFactory" min="2" max="100" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 

     </analyzer> 
    </fieldType>