0

我在我的应用程序中使用 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&amp;\-']|\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&amp;\-']|\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....”这样的标点符号。

更奇怪的是,所有的结果都是大写的,没有小写的结果。尽管它也不会返回所有大写字母的结果。

4

1 回答 1

1

我不认为我们可以用“分析器”做很多事情,因为它已经按照预期的方式工作了。在索引和查询期间应用标记器和过滤器的方式似乎没有任何危害。

因此,假设您的“分析器”部分很好,我认为您执行模糊搜索的方式需要进行一些修改。

您在搜索查询中使用的数字(在 ~ 之后)决定了模糊搜索的精度

“从 Lucene 1.9 开始,一个附加(可选)参数可以指定所需的相似度。该值介于 0 和 1 之间, 值接近 1只有具有更高相似度的术语才会匹配。”

我的建议是减少这个值以获得更多的搜索结果。通过反复试验,您可以根据您的要求在模糊搜索中达到预期的相似度水平。

于 2013-04-24T04:48:12.340 回答