2016-12-06 51 views
1

我試圖在Solr中實現單向同義詞或單向詞典(如Endeca中的詞典)。在我搜索攝像機的地方,我也得到了相機的結果,但反之亦然。我嘗試添加在Synonyms.txt以下,但似乎它給奇怪的結果將不工作:如何在Solr中使用單向同義詞?

攝像機=>相機

而我的schema.xml是:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"> 
    <analyzer type="index"> 
     <tokenizer class="solr.ClassicTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ClassicFilterFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.ClassicTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ClassicFilterFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
    </analyzer> 
</fieldType> 
+0

你忘了發佈你的schema.xml也給了我們更多的信息,你會得到什麼結果以及你期待什麼。 P.s'寫作要求答案asap'不會給你答案asap – root545

+0

如果沒有這個配置我分別搜索我得到說20和30結果分別。在一種方法中,攝像機搜索詞庫應該給我50個結果,而搜索相機應該仍然給我30個結果。 –

回答

0

既然你」在索引編制時(只要定義了SynonymFilter),camcorder將更改爲camera。如果在查詢時沒有進行相同的擴展,Solr仍會搜索對於camcorder(因爲沒有爲查詢定義SynonymFilter分析鏈)。索引中沒有camcorder標記,所以不會有命中。

當查詢以及索引時,您必須展開同義詞以實現單向同義詞所需的內容。

+0

我根據你的答案做了改變。但我仍然得到相同數量的結果。如果沒有同義詞配置(攝像機=>攝像頭),我分別搜索我得到20和30結果分別說。在一個方面同義詞搜索攝像機應該給我50個結果和搜索相機仍應該給我30個結果。 –

+0

如果這就是你想要的,那麼當你想索引時,你想重寫'camera'到'camera','camcorder',而不是相反。這樣,任何包含相機的文檔都將與相機和攝像機相關聯,並且攝像機只會與攝像機相關聯。 – MatsLindh

0

我想你要找的是:

camcorder => camera, camcorder 

如果不包括右側攝像機,攝像機不會,如果你搜索「攝像機」返回任何結果。