Solr - PatternTokenizer Factory的模糊搜索问题

时间:2013-04-19 13:11:53

标签: solr fuzzy-search

我在我的应用程序中使用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等字词。但它不会返回其他文件。

不确定会出现什么问题。

有人可以帮助我让它发挥作用吗?

编辑:

正则表达式会以任何期望字母,数字和'&amp;'的方式分割标记,' - '和ns :(其中n是0到9999之间的数字,例如4323s:)

让我们说例如我的文字如下。

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

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

this is nice day & sun is risen(所有单词都是差异标记)

模式似乎与不同的文本一起工作,

对于模糊搜索worde~1,我已检查了patterntokenizer工厂的结果返回,有标点符号,如'WORDS',WORDED ....等。

另一个奇怪的是,所有结果都是大写字母,没有小写结果的结果。虽然它也没有返回大写字母的所有结果。

1 个答案:

答案 0 :(得分:1)

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

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

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

  

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

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