【问题标题】:Solr - fuzzy search issue with PatternTokenizer FactorySolr - PatternTokenizer Factory 的模糊搜索问题
【发布时间】: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&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条记录有WORDWORDSWORSE这样的词。但它不会返回带有此类单词的其他文档。

不确定可能是什么问题。

有人可以帮我解决吗?

编辑:

正则表达式将按字母、数字、'&'、'-' 和 ns 以外的任何字符分割标记:(其中 n 是从 0 到 9999 的数字,例如 4323s:)

例如,我的文字如下所示。

this is nice* day &amp; sun 53s: is risen.

然后模式标记器应该创建标记为

this is nice day &amp; sun is risen(所有单词都是diff.token)

模式似乎适用于不同的文本,

同样对于模糊搜索worde~1,我已经检查了 patterntokenizer 工厂的结果返回,具有像“WORDS”、“WORDED....”等标点符号。

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

【问题讨论】:

  • 您能解释一下使用的正则表达式及其用途吗?
  • @Mavellin,请查看我更新的问题以获得更多解释。

标签: solr fuzzy-search


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢@Mavellin 的输入,我猜模糊搜索独立于过滤器,但不独立于分词器,因为模式分词器似乎只是因为它的原因不起作用,我正在寻找替代方法来满足我的要求。再次感谢:)
猜你喜欢
  • 1970-01-01
  • 2013-05-15
  • 2013-02-18
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
相关资源
最近更新 更多