3

我正在尝试用 Solr 进行模糊匹配。

在我的文档索引 first_name 字段中,我提到了“MYNEWORGANIZATION20SEP2011” - 实际上这个词是“我的新组织 20-Sep-2011”,但我删除了空格和其他字符。

现在如果我直接搜索为查询“MYNEWORGANIZATION20SEP2011”Solr 会在上面的单词(不带空格)上得到 1 个结果,如上面的文档 ID,完美!

但是,如果我从这个字符串中修剪两个字符并查询我是否提供“MYNEWORGNIZATION20SEP20~0.8”,我会得到 0 个结果。

对于我的新查询 MYNEWORGNIZATION20SEP20 与主文档数据的距离为 2 - 因此 % 匹配应该 > 90% 匹配,因此它仍然应该搜索数据(在我的查询中,我指定只有 80% 匹配。

顺便说一句,如果我将 first_name 用作“rushik”等 6-7 个字符并提供“rushik~0.75”之类的模糊查询,则搜索工作正常并返回数据。

在上述两种情况下,我都将字段类型用作“text_general” - 使用 solr 3.3。

Solr 中的模糊搜索是否有任何字符限制,或者它可以在任何地方进行配置?- 我正在使用默认的 solr 配置,没有更改 solrconfig.xml 中的任何内容

有没有更好的方法来搜索“我的新组织 2011 年 9 月 20 日”之类的带有模糊查询的字符串,而无需手动删除空格。

谢谢,拉希克。

4

1 回答 1

2

你的领域做了什么索引时间分析?
文本通用字段通常会经过空格标记器、停用词过滤器、单词分隔符和小写过滤器,在这种情况下,您的索引字段是完全不同的。
从 My New Organization 20-Sep-2011 -> MYNEWORGANIZATION20SEP2011 的转换是您在索引之前完成的吗?
此外,最重要的模糊搜索不进行查询时间分析。

您可能希望将字段类型用作字符串或小写字段类型,例如

    <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
    </fieldType>

并使用小写测试查询。

于 2011-09-22T06:18:56.837 回答