我正在使用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>
答案 0 :(得分: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 wiki链接。