2012-05-18 55 views
10

उदाहरण के लिए मैं समानार्थी शब्द लैपटॉप, नेटबुक, index_synonyms.txtक्या सौर समानार्थी शब्द का उपयोग करते समय मूल शब्द को और बढ़ावा देने का कोई तरीका है?

में नोटबुक है तो उपयोगकर्ता को खोज नेटबुक के लिए मैं मूल पाठ से अधिक पर्यायवाची शब्द से विस्तार को बढ़ावा देने के लिए चाहते हैं? क्या SynonymFilterFactory में इसे निर्दिष्ट करने का कोई तरीका है? उदाहरण के लिए मूल शब्द दो बार उपयोग करें ताकि उसका टीएफ बड़ा हो सके

उत्तर

7

जहां तक ​​मुझे पता है, मौजूदा SynonymFilterFactory के साथ ऐसा करने का कोई तरीका नहीं है। लेकिन निम्नलिखित एक चाल है जिसका उपयोग आप इस व्यवहार को पाने के लिए कर सकते हैं।

मान लें कि आपके क्षेत्र को title कहा जाता है। एक और फ़ील्ड बनाएं जो इसकी एक प्रति है, title_synonyms कहें। अब सुनिश्चित करें कि SynonymFilterFactory को केवल title_synonyms के लिए एक विश्लेषक के रूप में उपयोग किया जाता है (आप इसे दो फ़ील्ड के लिए विभिन्न फ़ील्ड प्रकारों का उपयोग करके कर सकते हैं - text और text_synonyms कहें)। इन दोनों क्षेत्रों में खोजें लेकिन title को title_synonyms से अधिक बढ़ाएं। आप dismax उपयोग कर रहे हैं

<copyField source="title" dest="title_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"/> 

कॉपी title क्षेत्र title_synonyms को

यहाँ नमूना फ़ील्ड प्रकार परिभाषाएं दी गई हैं , आप इन्हें अलग-अलग बढ़ावा दे सकते हैं इस तरह के फ़ील्ड:

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

वास्तव में अच्छा विचार! लेकिन मेरे मामले में मेरे पास लगभग 10 फ़ील्ड हैं जहां समानार्थी शब्द आवश्यक हैं ... यदि कोई अन्य कामकाज नहीं है तो यह होगा ... सोलर पैच इत्यादि – yura

+2

यदि आप उन सभी क्षेत्रों के लिए समान समानार्थी फ़ाइल का उपयोग कर रहे हैं, तो आप सभी को कॉपी कर सकते हैं उन्हें एक सामान्य समानार्थी फ़ील्ड में - आपको प्रत्येक फ़ील्ड के अनुरूप एक समानार्थी फ़ील्ड की आवश्यकता नहीं है। –

+1

लेकिन मैं सभी क्षेत्रों में ठीक दाग वजन का उपयोग करता हूं। इसलिए शीर्षक के लिए समानार्थी विवरण आदि के समानार्थी से अधिक महत्वपूर्ण है। – yura