在Solr 3.6.2中找到完全匹配

时间:2013-11-20 12:18:08

标签: solr

我正在使用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 个答案:

答案 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链接。