1

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

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

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

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

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

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

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

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

感谢您寻找罗杰

4

2 回答 2

4

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

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

于 2011-09-30T14:16:00.393 回答
1

我遇到了类似的问题,并通过编写自己的查询解析器并手动实例化查询原语来解决它。编写自己的查询解析器不一定容易,但它为您提供了很大的灵活性。在我的新查询语言中,我使用 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))
于 2012-12-05T02:04:46.817 回答