2013-11-20 135 views
0

我正在使用solr 3.6.2。搜索傳遞的前綴,後綴和中間的單詞。在Solr中查找完全匹配3.6.2

如果我搜索"20%",那麼在搜索結果中是"20%","* 0%""* 20 *"的表達式。如何從搜索結果"0% *""* 20 *"中排除並僅保留精確匹配"20%"?文件下面是schema.xml中

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" 
       pattern="[.-_]" replacement=" "> 
    <tokenizer class="solr.StandardTokenizerFactory"> 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="back"> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"> 
    <filter class="solr.LowerCaseFilterFactory"> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"> 
    </analyzer> 

    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"> 
    <filter class="solr.LowerCaseFilterFactory"> 
    </analyzer> 
</fieldType> 
+1

您正在使用哪個搜索處理程序(如'/ select')?如果你使用的是自定義的,你可以在你的'solrconfig.xml'中顯示這個條目。 – Kevin

+0

以我solrconfig.xml中: requestHandler名稱= 「/選擇」 類= 「solr.SearchHandler」 LST名稱= 「默認」 STR名稱= 「echoParams」>顯式 10 text user2995292

+0

重新格式化問題中的代碼。代碼目前有點搞砸了。 Tidier代碼將幫助人們更好地理解你的問題。 – Kevin

回答

0

如果你指的this information on the WordDelimiterFilterFactory你可以看到,非字母數字字符將被丟棄。例如,字符串「20%50」將被分成兩個令牌「20」和「50」。

A Solr wiki page covering WordDelimiterFilterFactory解釋瞭如何改變這種行爲。綜上所述,分析你的過濾器將需要更改爲:

<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <!-- The last parameter to the next filter is new! --> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" types="myTypes.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

參數types="myTypes.txt"指定在其中您可以控制的特殊字符應該解釋的文件。你myTypes.txt應在solr/conf目錄,其內容可能是這樣的:

% => DIGIT 

這會導致「%」被視爲一個數字。有關更多詳細信息,請參閱上面的Solr維基鏈接。

+0

非常感謝您的幫助! – user2995292

+0

它適合你嗎? – Kevin

+0

是的! <分析器類型= 「查詢」> <過濾器類= 「solr.StopFilterFactory」 IGNORECASE = 「真」 的話= 「stopWords.txt中」/> user2995292