2013-07-30 18 views
2

我有一個帶連字符的單詞。在我的情況下,它是「重用」。我希望能夠匹配它的「重用」,「重用」和「重用」。在SOLR中使用帶連字符的單詞

如果我使用WordDelimiterFilterFactorycatenateAll=1,那麼它會將「重用」轉換爲「重用」。這不包括搜索「重新使用」的情況。

除此之外,「重複使用」這個詞被用作SynonymFilterFactory的同義詞,因此解決方案也必須使用它。

如果我的同義詞文件顯示「re-use => other thing」,那麼當我輸入「re-use」或「reuse」或「re use」時,我希望能夠匹配「other thing」。我嘗試過創建一個同義詞條目,例如「re use => re-use」。這會導致匹配包含非複合版本的文檔,但不匹配「其他事物」(我並不介意對「re」或「use」進行匹配)。

我可以添加這個詞的同義詞,但我想要一個通用的解決方案。有什麼明顯的我錯過了嗎?

編輯:

我有4個文件:

  • 「東西」
  • 「再利用」
  • 「重用」
  • 「重用」

我想搜索這些條款中的任何一個並返回所有文檔。我的模式的相關位:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" catenateAll="1" preserveOriginal="1" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" catenateAll="1" preserveOriginal="1" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

如果我的同義詞文件看起來像這樣,一切都按預期工作。

re use, reuse, thing 

但是,我想表示「重用」和「重用」是同義詞。我也想說「重用」和「事物」,還有很多其他的東西都是同義詞。所以我試過這個:

re use, reuse 
reuse, thing 

這是行不通的。我認爲雷克斯的回答暗示它會呢?

回答

1

如果您正在做索引時間擴展,那麼定義重複使用的同義詞規則就足夠了。說,你有重用。然後你轉換它重用。然後,您應用SynonymFilter,以便在同一索引位置重新使用,重用'其他事物'。當您搜索「其他事物」時,無論您創建了多少次重複使用變體,都可以獲得匹配結果。

+0

謝謝。這就是我的想法,但這不是我所期望的。看我的編輯。 – Joe

相關問題