2015-10-20 19 views
7

私はでsolr 4.10(または5.3)を設定しました。ほとんどの単語でうまく動作しますが、 "ではなく"というハイライトが許可されている単語が見つかりました。つまり、solrは必要なドキュメントを返しますが、一部はハイライトしません。Solrは一部の単語を強調表示しません

このような影響を引き起こす原因は何ですか?クエリhttp://localhost:8983/solr/select?q=seniorについては

solrconfig.xml

<requestHandler name="/select" class="solr.SearchHandler"> 
<lst name="defaults"> 
    <str name="wt">json</str> 
    <str name="indent">true</str> 
    <str name="defType">edismax</str> 
    <str name="bf">product(concount)</str> 
    <str name="df">text bio text_syn text_syn_other</str> 
    <str name="qf"> 
    text^25 bio^16 text_syn^8 text_syn_other^3 
    </str> 
    <str name="hl">on</str> 
    <str name="hl.fl">text bio text_syn text_syn_other</str> 
    <str name="hl.preserveMulti">true</str> 
    <str name="hl.encoder">html</str> 
    <str name="f.text.hl.fragsize">100</str> 
    <str name="hl.snippets">20</str> 
    <arr name="components"> 
    <str>highlight</str> 
    </arr> 
</lst> 

のschema.xml

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms_abbr.txt" ignoreCase="true" expand="false"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

<fieldType name="text_en_syn" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

<fieldType name="text_en_syn_other" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms_other.txt" ignoreCase="true" expand="false"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" /> 
<field name="text_syn" type="text_en_syn" indexed="true" stored="false" multiValued="true" /> 
<field name="text_syn_other" type="text_en_syn_other" indexed="true" stored="false" multiValued="true" /> 

<field name="text_exact" type="string" indexed="true" stored="false" multiValued="false" /> 

<field name="bio" type="text_en" indexed="true" stored="true" multiValued="false" /> 

<field name="bio_exact" type="string" indexed="true" stored="false" multiValued="false" /> 

<field name="concount" type="long" indexed="true" stored="true" multiValued="false" /> 

<field name="concount_exact" type="long" indexed="true" stored="false" multiValued="false" /> 

<copyField source="text" dest="text_syn"/> 
<copyField source="bio" dest="text_syn"/> 
<copyField source="text" dest="text_syn_other"/> 
<copyField source="bio" dest="text_syn_other"/> 

は、私は言葉seniorを含むドキュメントを得たが、Solrの応答の部分を強調している言葉です強調表示されません。


UPDATE 1:私は、私は私のsynonyms_abbr.txtファイル内の単語seniorを持っていることを見つける 、ラインsenior,lead。その行にコメントしたり、言葉の場所を置き換えたりすると、lead,seniorという驚くべきことに、seniorという単語が強調表示され始めました。何か案は ?


UPDATE 2:synonyms.txtsynonyms_other.txtから 言葉は通常、強調してきているが、以下のようsynonyms_abbr.txtからの言葉は奇妙な動作。例えば、私はsynonyms_abbr.txtにラインlead,head,seniorを持って、その後

  • クエリhttp://localhost:8983/solr/select?q=seniorhttp://localhost:8983/solr/select?q=headは、任意の単語をハイライト
  • クエリhttp://localhost:8983/solr/select?q=leadハイライト言葉leadだけでなく、headseniorしません。
+0

単語の変換の分析には、Solrバックエンド機能を使用してください。私は、その言葉がどのように変容するかについてはわかりません。それはステミング問題かもしれません。それ以外の場合は、別のフィールドを使用し、トークナイザだけを残した変換をオフにして、そのフィールドからハイライト表示を試みます。 – 0xCAFEBABE

+0

@Mher強調表示されない単語は停止単語ですか?それとも無作為? –

+0

私はストームワードを設定していません。 'stopwords.txt'ファイル全体がコメント化されています。 – Mher

答えて

2

を実行しようとし、ファイルsynonyms_abbr.txtにシニア、シニア、鉛や鉛を追加しようとでした同義語の一致とハイライト

あなたはSolrWiki https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters上のドキュメントを見ればexpand=true一定の効果を持つ

同義語パラメータ名同義語を定義する外部ファイルの言及があります。 ignoreCaseがtrueの場合、一致が確認される前に小文字がマッチングされます。 expandがtrueの場合、同義語はすべての同義語に展開されます。偽の場合、同義語はすべてリストの最初のものに縮小されます。

サイトもプレゼントや例

# If expand==true, "ipod, i-pod, i pod" is equivalent to the explicit mapping: 
ipod, i-pod, i pod => ipod, i-pod, i pod 
# If expand==false, "ipod, i-pod, i pod" is equivalent to the explicit mapping: 
ipod, i-pod, i pod => ipod 

これは、あなたが観察している行動と一致しているようです。 これは、expand = trueを使用するようにschema.xmlのシノニムフィルタ定義を変更する必要があることを意味します。または、 は、シノニムファイルが明示的マッピングを使用するフィルタを定義する方法を変更します。

さらに、インデックス作成時にアナライザが機能するため、これを機能させるにはドキュメントを再インデクシングする必要があります。

+0

説明のためにありがとう、それは非常に有用です、あなたは質問の他の部分を説明してください:例えば、 'expand = true'を持っています。なぜ' synonyms_abbr.txt'ファイルその単語のすべての同義語はハイライトだけでなくハイライトにもなりますが、同義語を 'synonyms.txt'から選択して強調表示すると、その単語の同義語ではなくその単語だけが得られますか? – Mher

+0

フィールド定義を見ると、synonym.txtにリンクされているフィールドはstore = falseで構成されているようです。したがって、強調表示は機能しません。 ilincaのこの質問に対する他の回答を参照してください – vvs

2

一部のフィールドは格納されていないため、返されません。それらは索引付けされているため、検索可能です。強調表示するすべてのフィールドについて、スキーマをstored = "true"に変更します。

<field name="text_syn" type="text_en_syn" indexed="true" stored="true" multiValued="true" /> 
<field name="text_syn_other" type="text_en_syn_other" indexed="true" stored="true" multiValued="true" /> 

あなたの設定を見ると、強調表示はバイオとテキストのフィールドで機能しますか?

+0

@lincaはありません。強調表示は、バイオとテキストのフィールドだけでは機能しません。私は保存されていないファイルを考慮していません。 – Mher

+0

ああ、申し訳ありません。 テキストのbio text_syn text_syn_otherという行は、未保存の2つのフィールドのハイライトも欲しいと思っていました。フィールドの値、クエリ、結果の例が必要になると思います。 – ilinca

0

あなたはlead,head,seniorの中で唯一の最初の単語が実際に使用されていることは明らかであるあなたのアップデート2から、蛍光ペン

関連する問題