जहां तक मुझे पता है, मौजूदा 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>
स्रोत
2012-05-19 05:25:03
वास्तव में अच्छा विचार! लेकिन मेरे मामले में मेरे पास लगभग 10 फ़ील्ड हैं जहां समानार्थी शब्द आवश्यक हैं ... यदि कोई अन्य कामकाज नहीं है तो यह होगा ... सोलर पैच इत्यादि – yura
यदि आप उन सभी क्षेत्रों के लिए समान समानार्थी फ़ाइल का उपयोग कर रहे हैं, तो आप सभी को कॉपी कर सकते हैं उन्हें एक सामान्य समानार्थी फ़ील्ड में - आपको प्रत्येक फ़ील्ड के अनुरूप एक समानार्थी फ़ील्ड की आवश्यकता नहीं है। –
लेकिन मैं सभी क्षेत्रों में ठीक दाग वजन का उपयोग करता हूं। इसलिए शीर्षक के लिए समानार्थी विवरण आदि के समानार्थी से अधिक महत्वपूर्ण है। – yura