【问题标题】:solr partial word matchsolr 部分单词匹配
【发布时间】:2014-11-19 08:32:26
【问题描述】:

背景:

  • solr 4.10;
  • linux/java - 我猜他们在这一点上是无关紧要的;

我有这个词:ABCDEF。我需要找到名称(字段:NAME)与ABCDEF 有相同数量的字母的所有文档。示例:ABCDEF 应该匹配 4 个字母匹配:

  • 本身(ABCDEFABCDBCDE 等);
  • 各种排列:B..A.DE.....F..A.DE... - 这里的点是除ABCDEF 之外的其他字母。

我会尝试使用正则表达式(例如:^(<em>.?)([ABCDEF] (.</em>?)){4}$),但这也将匹配 A..A..B..CA 出现两次),我不需要这个。

字段类型为string。但是,添加另一个要以不同方式标记和索引的字段不会有问题。

此外,模糊搜索/匹配不是一个选项 - 因为我需要在匹配的字段中出现这些确切的字母。

有什么想法吗?

谢谢!

【问题讨论】:

  • 您能否给出您的场景中的任何用例,以便我知道您到底想做什么。几个月前,我在处理 solr 时也遇到了类似的情况。
  • 嗯,这很简单:我有一本书的名字,如果有一本书以相同的 2 个字母开头(比如说)并且它有 3 个其他字母,我需要在 solr 中搜索与原名通用。其他3个字母的位置不重要,但不能与开头的2个字母重叠。

标签: regex solr match partial


【解决方案1】:

将每个唯一字母(或键)索引为单独的标记 - 您可以在索引代码中将其拆分,也可以使用更新处理器将字段拆分为字符。请务必使用不会丢弃短标记(例如停用词)的字段类型。

当您有一个单独包含每个字母/键的字段时,使用 (e)dismax 的 mm 参数来提供必须匹配的词条数,并提供要搜索的字母/键作为单独的词条.

Index: ABCDEF
Document: field: (A, B, C, D, E, F)

Query: BCDF
/select?q=B C D F&mm=4&defType=dismax

Query: BCDF, at least two must match
/select?q=B C D F&mm=2&defType=dismax

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多