2012-05-18 18 views

cevap

7

Bildiğim kadarıyla, bu var olan SynonymFilterFactory ile bunu yapmanın bir yolu yoktur. Ancak, aşağıdaki davranışları görmek için kullanabileceğiniz bir numaradır.

Alanınızın title olarak adlandırıldığını varsayalım. Bunun bir kopyası olan başka bir alan oluşturun, title_synonyms deyin. Şimdi SynonymFilterFactory'nin sadece title_synonyms için bir analizör olarak kullanıldığından emin olun (bunu iki alan için farklı alan türleri kullanarak yapabilirsiniz - örneğin, text ve text_synonyms). Her iki alanda da arama yapın, ancak title'a title_synonyms'dan daha yüksek bir artış verin. Eğer dismax kullanıyorsanız

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

: Burada

<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> 

Ve olan örnek alan tanımları:

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

Kopya title alan title_synonyms için Buraya

örnek alan türü tanımları vardır , bunlara farklı destek verebilir gibi alanlar:

+0

Gerçekten güzel bir fikir! Ama benim durumumda eşanlamlıların gerekli olduğu yaklaşık 10 alanım var ... başka bir çözüm yok ise bunu yapacağız ... solr yamalar vs. – yura

+2

Tüm bu alanlar için aynı eş anlamlılar dosyasını kullanıyorsanız Bunları bir ortak eşanlamlı alana dönüştürün - her alana karşılık gelen bir eşanlamlı alana ihtiyacınız yoktur. –

+1

Fakat tüm alanlara ince taneli ağırlık kullanıyorum. Yani başlık için eşanlamlı açıklama vb eşanlamlı daha önemli. – yura

İlgili konular