我设置了一个类型配置为
的字段<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。因此,#usopen
和usopen
都会为#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
。
上述配置中的问题是什么,并帮助我解决它。
答案 0 :(得分:0)
CharFilter很可能会更改索引字符串中的偏移,然后与原始字符串不匹配。
尝试使用TokenFilter(PatternReplaceFilterFactory)。
此外,在索引和搜索期间将#something =&gt;规范化并且不尝试保留两种形式可能更有意义。只要它匹配,就是你所关心的一切。