2012-01-04 8 views
5

「www。google。com」や「email @ google。com」のように、期間の後にスペースとメールが表示されるコンテキストハイライトの結果が返されます。これをオフにすると、彼らは正常に表示されますか?ありがとう。検索結果のURLとメール

クエリ:configに

/solr/core1/select?q=email&start=0&rows=10&sort=score+desc&fq=%28categories%3A%28*8*%29%29&wt=javabin&version=2 

ハイライト部分:

<searchComponent class="solr.HighlightComponent" name="highlight"> 
<highlighting> 
    <!-- Configure the standard fragmenter --> 
    <!-- This could most likely be commented out in the "default" case --> 
    <fragmenter name="gap" 
       default="true" 
       class="solr.highlight.GapFragmenter"> 
    <lst name="defaults"> 
     <int name="hl.fragsize">250</int> 
    </lst> 
    </fragmenter> 

    <!-- A regular-expression-based fragmenter 
     (for sentence extraction) 
    --> 
    <fragmenter name="regex" 
       class="solr.highlight.RegexFragmenter"> 
    <lst name="defaults"> 
     <!-- slightly smaller fragsizes work better because of slop --> 
     <int name="hl.fragsize">70</int> 
     <!-- allow 50% slop on fragment sizes --> 
     <float name="hl.regex.slop">0.5</float> 
     <!-- a basic sentence pattern --> 
     <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str> 
    </lst> 
    </fragmenter> 

    <!-- Configure the standard formatter --> 
    <formatter name="html" 
      default="true" 
      class="solr.highlight.HtmlFormatter"> 
    <lst name="defaults"> 
     <str name="hl.simple.pre"><![CDATA[<b class="highlite">]]></str> 
     <str name="hl.simple.post"><![CDATA[</b>]]></str> 
    </lst> 
    </formatter> 

    <!-- Configure the standard encoder --> 
    <encoder name="html" 
      class="solr.highlight.HtmlEncoder" /> 

    <!-- Configure the standard fragListBuilder --> 
    <fragListBuilder name="simple" 
        default="true" 
        class="solr.highlight.SimpleFragListBuilder"/> 

    <!-- Configure the single fragListBuilder --> 
    <fragListBuilder name="single" 
        class="solr.highlight.SingleFragListBuilder"/> 

    <!-- default tag FragmentsBuilder --> 
    <fragmentsBuilder name="default" 
        default="true" 
        class="solr.highlight.ScoreOrderFragmentsBuilder"> 
    <!-- 
    <lst name="defaults"> 
     <str name="hl.multiValuedSeparatorChar">/</str> 
    </lst> 
    --> 
    </fragmentsBuilder> 
</highlighting> 

更新スキーマ:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <!-- <tokenizer class="solr.WhitespaceTokenizerFactory"/> --> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <!-- Case insensitive stop word removal. 
     add enablePositionIncrements=true in both the index and query 
     analyzers to leave a 'gap' for more accurate phrase queries. 
    --> 
    <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"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
    <!-- <tokenizer class="solr.WhitespaceTokenizerFactory"/> --> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

フィールド

<fields> 
..... 
<field name="tease" type="text" indexed="false" stored="true" /> 
<field name="text" type="text" indexed="false" stored="true" /> 
<field name="fulltext" type="text" indexed="true" stored="false" multiValued="true"/> 
</fields> 

<copyField source="text" dest="fulltext"/> 
<copyField source="title" dest="fulltext"/> 
<copyField source="tease" dest="fulltext"/> 
<defaultSearchField>fulltext</defaultSearchField> 
+0

あなたが使用しているクエリを追加するだけでなく、してくださいできsolconfig.xmlファイルの設定を強調表示しますか? –

+0

管理コンソールで検索してインデックスに登録したコンテンツを見ると余分なスペースが表示されるため、トークンの最後には何かがあります。私はこれがよくある質問だと思っていて、トークン化ロジックで何かを有効または無効にすることになります。しかし、私はこれが何であるかは分かりません。 –

答えて

5

標準のトークナイザと同様ですが、メールアドレス、URL、ドメイン名、IPv4/IPv6アドレスを認識できるUAX29URLEmailTokenizerFactory tokenizerを試してみてください。 Solrのリファレンスガイドからの例:で

Visit http://accarol.com/contact.htm?from=external&a=10 or e-mail [email protected]アウト

Visithttp://accarol.com/contact.htm?from=external&a=10oremail[email protected]

+0

は有望ではあったが、まだ聞こえなかった。以前のトークナイザを削除し、これを追加し、SOLRを再起動し、再インデックス化し、コミットしたスキーマを更新しましたが、電子メールとURLのピリオドの後も同じ結果が得られます。 –

+0

[WordDelimiterFilterFactory](http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory)は、問題を引き起こすものです(トークンをサブトークンに分割します)。それを無効にしてみることができますか(またはおそらく 'preserveOriginal =" 1 "')を設定できますか? – Chewie

+0

"preserveOriginal = 1"と両方を無効にしてみましたが、同じ結果が得られました。 –