2012-05-18 55 views

回答

7

據我所知,現有的SynonymFilterFactory沒有辦法做到這一點。但以下是你可以用來獲得這種行爲的技巧。

假設您的字段名爲title。創建另一個字段,即title_synonyms。現在確保SynonymFilterFactory僅用作title_synonyms的分析器(您可以通過對兩個字段使用不同的字段類型 - 例如texttext_synonyms)來執行此操作。搜索這兩個領域,但給予titletitle_synonyms更高的提升。

這裏有樣品字段類型定義:

<fieldType name="text" class="solr.TextField"> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="text_synonyms" class="solr.TextField"> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms_index.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms_query.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
    </fieldType> 

這裏是樣品的字段定義:

<field name="title" type="text" stored="false" 
      required="true" multiValued="true"/> 
    <field name="title_synonyms" type="text_synonyms" stored="false" 
      required="true" multiValued="true"/> 

複製titletitle_synonyms

<copyField source="title" dest="title_synonyms"/> 

如果您正在使用dismax ,你可以給這些不同的提升像這樣的領域:

<str name="qf">title^10 title_synonyms^1</str> 
+0

真的好主意!但在我的情況下,我有大約10個字段需要同義詞......所以如果沒有其他解決方法...... solr補丁等將會這樣做 – yura

+2

如果您對所有這些字段使用相同的同義詞文件,則可以將所有他們到一個共同的同義詞領域 - 你不需要一個對應於每個領域的同義詞領域。 –

+1

但我對所有的領域使用細粒重量。所以標題的同義詞比描述的同義詞更重要。 – yura