2016-05-27 7 views
0

私はSolr 6.0を使用しています。 SolrHighlighting機能を使用します。Sollハイライトがhl.qなしで動作しない

私は次のクエリを行うと応答highlightingセクションでは、IDS(&hl.q=data:*ad*なし)のみ持っている -

http://<hostname>:<port>/solr/<core>/select?q=text:ad&fl=data&rows=10&hl=on&hl.fl=data&hl.preserveMulti=true&hl.mergeContiguous=true 

出力 -

"highlighting": { 
    "id1": {}, 
    "id2": {} 
} 

私は、次のクエリを作るとき私が手を所望の出力(&hl.q=data:*ad*) -

http://<hostname>:<port>/solr/<core>/select?q=text:ad&fl=data&rows=10&hl=on&hl.q=data:*ad*&hl.fl=data&hl.preserveMulti=true&hl.mergeContiguous=true 

出力 -

"highlighting": { 
    "id1": { 
     "data": ["<em>advertise</em>", 
      "<em>add</em>" 
     ] 
    }, 
    "id2": { 
     "data": ["<em>admin</em>", 
      "<em>addon</em>" 
     ] 
    } 
} 

はなぜhl.qに合格する必要がありますか?それを避ける方法はありますか?

私はカスタムにsolrconfig.xmlrequestHandler(qt)を書きたいならば、私はhl.q=*$q*のような接頭辞と接尾ものとして*hl.qにq値を渡すことができます。

私は、次の2つのフィールドを持っている -

<field name="text" type="text_suggest" indexed="true" stored="false" multiValued="true"/> 
<field name="data" type="lower" indexed="false" stored="true" multiValued="true"/> 

後は、フィールドの定義である -

<copyField source="somefield" dest="text" maxChars="30"/> 
<copyField source="somefield" dest="data"/> 
-

<fieldType name="lower" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
    <analyzer> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 
<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="30"/> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

後は、データを2つのフィールドにコピーされる方法です。

edit1

最初のクエリに&hl.alternateField=dataを追加すると、通常の検索と同様に、複数値フィールドのすべての値がhighlightingセクションに表示されます。以下のように -

"highlighting": { 
    "id1": { 
     "data": ["advertise", 
      "not relevant", 
      "add" 
     ] 
    }, 
    "id2": { 
     "data": ["admin", 
      "addon", 
      "irrelevant" 
     ] 
    } 
} 

答えて

1

タイプにEdgeNGramフィルタを追加し、それが最初の例と一致します。 NGramがないため、データの「広告」と一致しません。

関連する問題