我在我的应用程序中使用 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....”这样的标点符号。
更奇怪的是,所有的结果都是大写的,没有小写的结果。尽管它也不会返回所有大写字母的结果。