【发布时间】:2013-04-19 13:11:52
【问题描述】:
我在我的应用程序中使用 Solr4.2。我已更改我的文本字段定义以使用Solr.PatternTokenizerFactory 而不是Solr.StandardTokenizerFactory,并更改了我的架构定义如下
<fieldType name="text_token" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[^a-zA-Z0-9&\-']|\d{0,4}s:" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[^a-zA-Z0-9&\-']|\d{0,4}s:" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_extra_query.txt" enablePositionIncrements="false" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这样做之后,模糊搜索似乎不像以前那样正常工作了。
我正在使用搜索词进行搜索:worde~1
在搜索时,它以前返回大约 300 条记录,而现在它只返回 5 条记录。
这5条记录有WORD、WORDS、WORSE这样的词。但它不会返回带有此类单词的其他文档。
不确定可能是什么问题。
有人可以帮我解决吗?
编辑:
正则表达式将按字母、数字、'&'、'-' 和 ns 以外的任何字符分割标记:(其中 n 是从 0 到 9999 的数字,例如 4323s:)
例如,我的文字如下所示。
this is nice* day & sun 53s: is risen.
然后模式标记器应该创建标记为
this is nice day & sun is risen(所有单词都是diff.token)
模式似乎适用于不同的文本,
同样对于模糊搜索worde~1,我已经检查了 patterntokenizer 工厂的结果返回,具有像“WORDS”、“WORDED....”等标点符号。
更奇怪的是,所有的结果都是大写的,没有小写的结果。虽然它也不会返回所有大写字母的结果。
【问题讨论】:
-
您能解释一下使用的正则表达式及其用途吗?
-
@Mavellin,请查看我更新的问题以获得更多解释。
标签: solr fuzzy-search