构建用于搜索联系人的Lucene搜索索引的最佳方法

时间:2012-01-25 18:44:56

标签: lucene

我正在使用Lucene搜索联系人数据库。通过联系我指的是一个名字,多个电话号码,电子邮件,地址等等。在数据库中,这些显然被分成单独的字段甚至是单独的表。我希望能够根据任何字段搜索联系人,例如我可以输入“John Doe”,Lucene会返回John Doe的联系信息。 John Doe也有一个电话号码,我希望能够通过输入电话号码,地址或电子邮件等找到他的记录。我不想具体说明我要搜索的字段。

创建索引时,最好将所有数据合并到一个“数据”字段中,还是将它们分开?我将不会在索引中存储数据,除了我将用于从数据库中检索所有其他数据的id。标准分析器和查询分析器在我的情况下是否可以正常工作,还是应该采用更多自定义方法?

我对Lucene很新,我只是在学习它有多强大,所以我并不反对真正进入它并创建一些复杂的自定义搜索查询,但我需要一些指导这样做并且想要避免如果不是必要的话,必须做所有这些。

2 个答案:

答案 0 :(得分:1)

使用单个搜索字段是最有效的解决方案。这将使您索引更小,更快。即使您存储了字段,您仍然可以为搜索创建一个聚合索引(但不存储)字段,并为每个联系信息设置一个存储(但不是索引)字段。

标准分析器和查询解析器将帮助您快速构建原型,但您可能需要使用自定义分析器来改进应用程序,例如,如果您需要:

  • 查询以独立于变音符号(ASCIIFoldingFilter),
  • 提供相同的结果
  • 处理电话号码中的空格(以便“0532”的查询与“0532”以及“05 32”匹配。)

答案 1 :(得分:1)

您无需创建单个组合字段,将它们分开可能是更好的设计决策。想想看,你可能想做专门的搜索。

您可以使用MultiFieldQuery搜索所有字段,例如姓名,地址,城市......