Solr patternreplacefilterfactory提供了无与伦比的价值

时间:2016-09-07 12:21:07

标签: solr highlight tokenize solrj solr4

我设置了一个类型配置为

的字段
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
          <analyzer type="index">
          <charFilter class="solr.PatternReplaceCharFilterFactory"
                 pattern="#(\w+)" replacement="HTAG.$1 $1"/>
            <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
            <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
          <analyzer type="query">
              <charFilter class="solr.PatternReplaceCharFilterFactory"
                 pattern="#(\w+)" replacement="HTAG.$1"/>
            <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
            <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
        </fieldType>

我的目标是索引单词和#words。因此,#usopenusopen都会为#usopen编制索引。

使用hl因子hl.fl=text&hl.fragsize=0&hl.simple.pre=<tag>hl.simple.post=</tag>&hl.requireFieldMatch=true之外的参数进行查询。

当我查询usopen时,突出显示为#usope<tag>n</tag>的文字值,并在查询#usopen时,文字值显示为<tag>usope</tag>n

上述配置中的问题是什么,并帮助我解决它。

1 个答案:

答案 0 :(得分:0)

CharFilter很可能会更改索引字符串中的偏移,然后与原始字符串不匹配。

尝试使用TokenFilter(PatternReplaceFilterFactory)。

此外,在索引和搜索期间将#something =&gt;规范化并且不尝试保留两种形式可能更有意义。只要它匹配,就是你所关心的一切。