我正在尝试构建一个查询来搜索名称变体的名称的Lucene索引。 该索引是使用Lucene.NET版本2.9.2
构建的用户输入例如“Margaret White”。 如果没有名称变体选项,我的查询将变为“Margaret White”~1并且它可以正常工作。
现在,我可以针对firstname和surname查找名称变体以生成扩展列表。 例如。在这种情况下(我只包括一些作为例子,因为列表有时可以是100或更多)我们可以有
Margaret / Margrett White / Whyte
查询“margrett white”~1 OR“margaret white”~1 OR“margrett whyte”~1 OR“margaret whyte”~1
给了我正确的结果但是给出了可能的100 x 100变体组合,查询字符串至少可以说是麻烦的。
我尝试了各种方法来实现更紧凑的查询,但似乎没有任何效果。
任何人都可以给我任何指示或替代方法。我控制了索引创建过程,并想知道在那个阶段我能做些什么吗?
谢谢你的期待 罗杰
答案 0 :(得分:4)
在索引过程中而不是在查询时执行同义词过滤器。只需将“白色”,“为什么”,......映射到一个单词;说“白”。 “玛格丽特”也是如此。
然后您的查询将是"margaret white"~1
答案 1 :(得分:1)
我遇到了类似的问题并通过编写自己的查询解析器并手动实例化查询原语来解决它。编写自己的查询解析器并不一定容易,但它为您提供了很大的灵活性。在我的新查询语言中,我使用/ 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))