2012-03-11 108 views
2

我使用Ruby太陽黑子寶石使用Solr 1.4.1Solr的(黑子)查詢連字符和停止詞

我身邊有一個連字符搜索的問題。

當我搜索「foo bar bla」時,返回預期的結果。

當搜索詞中包含連字符(如「foo - bar bla」)時,不會返回任何結果。

我在我的停用詞表中添加了連字符,並在過去幾天中以多種方式調整了我的schema.xml文件,但無濟於事。

對於那些暴露在太陽黑子我有我的最小單詞匹配設置爲3,其與設置在同一毫米配置在solrconfig.xml中的文件,如:3

這是多麼的相關部分我的schema.xml文件看起來。

<!-- *** This fieldType is used by Sunspot! *** --> 
<fieldType name="string" class="solr.StrField" tokenized="true" omitNorms="true" sortMissingLast="true"> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    </analyzer> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" /> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"/> 
    </analyzer> 
</fieldType> 

<!-- *** This fieldType is used by Sunspot! *** --> 
<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    </analyzer> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" /> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"/> 
    </analyzer> 
</fieldType> 

任何幫助或建議將不勝感激。

謝謝,

回答

6

的連字符( - )是用於排除結果匹配如下操作的字中的Solr的運算符。我不認爲在停用詞表中添加連字符會影響這一點。我建議在通過Solr運行查詢之前剝掉連字符。我的猜測是發生了什麼事情,連字符的結果是排除與「欄」匹配的文檔?也許你可以試着去面對結果,看看事實是否如此。

+0

嘿大衛,昨晚我發佈了這個確切的想法,感謝確認我的懷疑,如果我仔細檢查這個表面或其他方面,我一定會報告。 – 2012-03-12 19:27:28