2012-02-15 10 views
12

に言及し、私は@usernameまたは#hashtagsを検索できるようにするには、以下の設定でWordDelimiterFactoryを使用しています:ハッシュタグのためのSolr検索や私たちがツイートかかわらず検索するのSolrバージョン3.5を使用している

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" handleAsChar="@#"/> 

私は、次のを見ましたパッチが、私は期待どおりに動作していないようだ、私は何かを欠場ですか?

https://issues.apache.org/jira/browse/SOLR-2059

しかし、また、単にユーザ名または#hashtagのために結果を返していることがちょうどhastagに対する結果を返している@usernameを検索。どうすればこれを達成できますか?

全体のフィールドタイプ:彼らはtypes属性を持つWordDelimiterFactoryにhandleAsChar属性を置き換えているよう

<fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 

<fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1"/>  
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

<fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      handleAsChar="@#" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      handleAsChar="@#" 
      />  
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
+0

他のフィルタやトークナイザが結果に影響を与えている可能性があるので、使用しているfieldType定義全体を表示できますか? –

+1

個人的には、インデックスに2つのフィールドを追加します.1つはタグのコメントのリスト用です。これらをインデックスに追加すると、あなたのつぶやきからこれらを解析します。そうすれば、新しい機能に頼ることはありません。 –

答えて

15

OK、あなたが言及したSOLR-2059パッチを読んで、それが見えます。ここアナライザからその属性の仕様があり、トークナイザとトークンは、SolrのWikiページをフィルタ:

タイプ=「wdfftypes.txt」は、このフィルタのためにカスタマイズされたトークン化することができます。ファイルはsolr/confディレクトリに存在する必要があり、エントリは "%=> ALPHA"または "\ u002C => DIGIT"という形式です(引用符は不要です)。許容されるタイプは、下、上、アルファ、ダイ、アルファハム、サブワードです。

我々はSOLR-2059からこのドキュメントに加え、ファイルの例を取るのであれば、その後、私は以下をお勧めします:

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" types="twittertypes.txt"/>

次のように続いてtwittertypes.txtファイルを定義し、それをSolrインスタンスのschema.xmlファイルと同じフォルダ(おそらくconfフォルダ)に置きます。

# A customized type mapping for WordDelimiterFilterFactory 
# the allowable types are: LOWER, UPPER, ALPHA, DIGIT, ALPHANUM, SUBWORD_DELIM 
#  
# the default for any character without a mapping is always computed from 
# Unicode character properties 

# Map the $, %, '.', and ',' characters to DIGIT 
# This might be useful for financial data. 
@ => ALPHA 
\u0023 => ALPHA 

あなたはそれがテキストファイルにコメントとして扱われるため、ハッシュ記号のためのUnicode文字(UTF-8)を使用する必要があります注意してください。

すべてのドキュメントによれば、これは問題を解決し、#と@記号をアルファベット文字として扱い、あなたが探している動作を提供するはずです。

+2

ありがとうPaige、あなたが言ったように働く昨夜遅くそれを考え出した。 – sesmic

+0

私は上記のすべてを行い、solrサービスを再開しました。まだ#pizzaとpizzaを検索すると、同じ結果が得られます。 – PepperoniPizza

+0

設定を変更した後にドキュメントのインデックスを再作成しましたか? schema.xmlファイルで文書の索引付け方法に影響を与える変更を行うたびに、変更された索引語に反映されるように文書を再索引付けする必要があります。 –

関連する問題