【问题标题】:Lucene Proximity Search with multiple words使用多个单词的 Lucene Proximity Search
【发布时间】:2011-09-30 13:07:07
【问题描述】:

我正在尝试构建一个查询来搜索名称变体的 Lucene 索引。 该索引是使用 Lucene.NET 2.9.2 版构建的

用户输入例如“Margaret White”。 如果没有名称变体选项,我的查询将变为“Margaret White”~1 并且可以正常工作。

现在,我可以根据名字和姓氏查找名称变体以生成扩展列表。 例如。在这种情况下(我只包括一些作为示例,因为列表有时可能是 100 或更多)我们可以有

玛格丽特/玛格丽特怀特/怀特

查询“玛格丽特·怀特”~1 OR “玛格丽特·怀特”~1 OR “玛格丽特·怀特”~1 OR “玛格丽特·怀特”~1

给我正确的结果,但给定一个可能的 100 x 100 变体组合,查询字符串至少可以说很麻烦。

我尝试了各种方法来实现更紧凑的查询,但似乎没有任何效果。

谁能给我任何指示或替代方法。我可以控制索引创建过程,想知道在那个阶段我可以做些什么吗?

感谢收看 罗杰

【问题讨论】:

  • 作为后续,我现在实现了一个基于link 的自定义分析器,它将额外的名称变体标记插入到标记流中。所以现在我的搜索将找到所有变体。我现在正在寻找仅在文档中存在同义词时添加同义词以减少排列的方法。我可以从自定义过滤器内部访问原始文本的唯一方法是访问传递给分析器的 TextReader - 读取它以获取文本将其带到文本的末尾,而无法“倒带”然后读取令牌.

标签: lucene proximity


【解决方案1】:

在索引过程中而不是在查询时进行同义词过滤。只需将“white”、“whyte”……映射到某个单词;说“白”。 “玛格丽特”也一样。

那么您的查询将只是"margaret white"~1

【讨论】:

  • 感谢您的输入 - 我也有同样的想法 - 我正在创建一个自定义分析器,它将在索引创建期间查找同义词并为替代项构建额外的标记,所有指向在同一个位置。正如你所指出的,这很好用。我现在必须解决的剩下的问题是突出结果。我不太确定如何解决这个问题 - 我可能会尝试使用解释函数的结果来构建一个可能的替代方案列表以尝试突出显示。
  • @RogerDodge:为什么要突出显示问题?只需在查询和索引期间进行翻译,术语就会完全匹配。
  • 问题是当我搜索“玛格丽特·怀特”并且文档包含“玛格丽特·怀特”时。我不知道哪个组合造成了打击。我正在使用 FastVectorHighlighter,它可以突出显示每个单独的单词。对我来说,这是不正确的,因为我不能有一个突出显示的术语“白色”,例如,如果它在 Thomas White 旁边。我现在覆盖荧光笔中的 FieldQuery.flatten 方法,以构建由两个名字/姓氏术语的所有排列组成的新短语。该列表可能非常大并且会影响性​​能,因此我正在寻找减少这种情况的方法。
  • @RogerDodge:我不明白为什么翻译 both 查询和索引会失败。您可能想尝试提出另一个问题以向更广泛的受众开放。
  • 它不会在搜索中失败 - 它非常快 - 它实际上并没有突出显示失败 - 它只会生成大量可能的搜索词来匹配,这会极大地影响性能。一旦我可以正确地详细说明问题,我将提出一个新问题。感谢您的关注。
【解决方案2】:

我遇到了类似的问题,并通过编写自己的查询解析器和手动实例化查询原语来解决它。编写自己的查询解析器不一定容易,但它为您提供了很大的灵活性。在我的新查询语言中,我使用 within/N 来指定邻近查询。有了它,以下复杂的查询成为可能:

margaret within/3 white
margaret within/3 (white or whyte)

甚至更复杂的查询

("first name" within/3 margaret) within/10 ("last name" within/3 (white or whyte))

【讨论】:

  • 这很有趣。您可以在这里发布您的查询解析器吗?
  • 它已在生产中使用(请参阅此处:docketalarm.com/search),但我还没有准备好在开放网络上分享它。如果您对此感兴趣,请在我的个人资料上给我发电子邮件。
  • 谢谢,但最后我找到了我正在寻找的答案:stackoverflow.com/a/10983841/2091700
  • 我查看了您的链接。太棒了!
猜你喜欢
  • 2014-10-22
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2023-03-07
  • 2017-08-27
  • 2015-02-07
相关资源
最近更新 更多