キーワードIPLでsolrを検索すると、IPLと#IPLの両方を含む結果が必要です。これを達成するには?Solrでハッシュタグも含めて検索
インデックスとクエリで、このようにWordDelimFactoryを試しましたが、うまくいきませんでした。 。
私は文字列を "string"と "#string"に分割する必要があると思いますが、それを行う方法はわかりません。
キーワードIPLでsolrを検索すると、IPLと#IPLの両方を含む結果が必要です。これを達成するには?Solrでハッシュタグも含めて検索
インデックスとクエリで、このようにWordDelimFactoryを試しましたが、うまくいきませんでした。 。
私は文字列を "string"と "#string"に分割する必要があると思いますが、それを行う方法はわかりません。
あなたはすべての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
これは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>
これは、IPLだけでなくすべての検索キーワードに対して実行したいと思います。どのようにsynonyms.txtでそのように設定するのですか? – Babu
あなたのクエリータームはトークン化されています。 solr.StandardTokenizerFactoryはキーワードから#を削除します。 – vinod
whitespacefactory を使用しています \t \t <= "solr.WhitespaceTokenizerFactory" /トークナイザクラス><フィルタクラス= "solr.StopFilterFactory" ignoreCaseは= "true" の言葉= "stopwords.txt" enablePositionIncrements = "真" /> <フィルタークラス= "solr.LowerCaseFilterFactory" /> \t \t \t \t –
Babu