2013-04-10 172 views
0

我們需要Solr的搜索像搜索Solr的:搜索與特殊字符與短語搜索

"Success & Failure" 
"Working 50%" 

但Solr的查詢分析器消除所有的特殊字符,但如果我轉義序列添加到它。

我的搜索查詢如下

http://localhost:8080/solr/core0/select?q=%22Success%20\%26%20Failure%22&debugQuery=on 
以下

提到是debugQuery它。

<lst name="debug"> 
    <str name="rawquerystring">"Success & Failure"</str> 
    <str name="querystring">Success & Failure"</str> 
    <str name="parsedquery">PhraseQuery(text:"success failure")</str> 
    <str name="parsedquery_toString">text:"success failure"</str> 
    <lst name="explain"/> 
    <str name="QParser">LuceneQParser</str> 
    <lst name="timing"></lst> 
</lst> 

...我已經尋找這種過度的網絡,我得到的結果說,特殊字符應該被索引,使其工作在默認情況下爲SOLR不索引任何特殊字符。

要做到這一點,我已經添加solr.WordDelimiterFilterFactoryTextField定義

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
    <!-- <charFilter class="solr.MappingCharFilterFactory" mapping="char-mapping.txt"/>--> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" 
       splitOnCaseChange="0" 
       splitOnNumerics="0" 
       stemEnglishPossessive="0" 
       generateWordParts="0" 
       generateNumberParts="0" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" 
       types="wdfftypes.txt" 
       /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" 
       splitOnCaseChange="0" 
       splitOnNumerics="0" 
       stemEnglishPossessive="0" 
       generateWordParts="0" 
       generateNumberParts="0" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" 
       types="wdfftypes.txt" 
       /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

althohg這樣做,它不會在搜索詞解析&

想做成,solr應該用「成功&失敗」搜索,並且不應該消除特殊性。

有人有什麼想法,該怎麼做?

回答

1

您應該考慮使用solr.WhitespaceTokenizerFactory而不是solr.StandardTokenizerFactory,因爲StandardTokenizer使用特殊字符作爲字邊界。在這種情況下,你需要開始思考如何將文本分割成單詞。

此外,您正在使用的WordDelimiterFilterFactory可能會過濾此字符。爲防止這樣做,您應該能夠根據此問題「How do I find documents containing digits and dollar signs in Solr?」在類型定義中將&定義爲ALPHA。

該定義是在您的solr.WordDelimiterFilterFactory的聲明中指定的文件types =「wdfftypes.txt」中給出的內容。

& => ALPHA

進一步閱讀該文件需要如何由

+0

感謝@克里斯Eventy答覆,我不需要wordelimiter工廠,我已經添加它來保存'&'只在我的文本。我已將模式更改爲使用PatternTokenizer Factory和指定的標記。和幾乎工作:) – meghana 2013-04-17 12:06:10