2016-04-28 32 views
0

キーワードIPLでsolrを検索すると、IPLと#IPLの両方を含む結果が必要です。これを達成するには?Solrでハッシュタグも含めて検索

インデックスとクエリで、このようにWordDelimFactoryを試しましたが、うまくいきませんでした。 。

私は文字列を "string"と "#string"に分割する必要があると思いますが、それを行う方法はわかりません。

答えて

0

あなたはすべてのkerywordが#keywordとして検索したい場合は、特定のフィールドで検索する場合、あなたは

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

のようなクエリで使用してOR演算子試すことができ、その後

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

あなたは試すこと同義語でしかし、この場合は#の接頭辞を付けてください。

solrインスタンスの設定ファイルに移動します。 confフォルダ内のsynonyms.txtファイルを編集します。

IPL => #IPL

OR

変更schema.xmlファイルでクエリのフィールドトークナイザ、

<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> 

その後、Solrのテキストであるため、フィールド名/select?q=text:#IPL

に問い合わせますデフォルトで試してみることができます/select?q=#IPL

+0

これは、IPLだけでなくすべての検索キーワードに対して実行したいと思います。どのようにsynonyms.txtでそのように設定するのですか? – Babu

+0

あなたのクエリータームはトークン化されています。 solr.StandardTokenizerFactoryはキーワードから#を削除します。 – vinod

+0

whitespacefactory を使用しています \t \t <= "solr.WhitespaceTokenizerFactory" /トークナイザクラス><フィルタクラス= "solr.StopFilterFactory" ignoreCaseは= "true" の言葉= "stopwords.txt" enablePositionIncrements = "真" /> <フィルタークラス= "solr.LowerCaseFilterFactory" /> \t \t \t \t Babu

0

これはWordDelimiterFilterFactoryで行われます。 generateWordParts=1.も設定してくださいpreserveOriginal = 1にしてください。 これはオリジナルを保持し、#を付けずに新しいものを作成します。

schema.xmlを変更した後、サーバーを再起動し、データのインデックスを再作成します。

<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> 
関連する問題