建立Lucene搜索索引以搜索联系人的最佳方法

建立Lucene搜索索引以搜索联系人的最佳方法,lucene,Lucene,我正在使用Lucene搜索联系人数据库。所谓联系人,我指的是一个姓名、多个电话号码、电子邮件、地址等。在数据库中,这些显然被划分为单独的字段,甚至是单独的表。我希望能够根据任何字段搜索联系人,例如,我可以键入“John Doe”,Lucene将返回John Doe的联系信息。John Doe也有一个电话号码,我希望能够通过输入该电话号码、地址或电子邮件等来查找他的记录。我不想特别说明我要搜索的字段 创建索引时,最好将所有数据合并到单个“数据”字段中,还是将它们分开?除了用于从数据库检索所有附加数

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

创建索引时,最好将所有数据合并到单个“数据”字段中,还是将它们分开?除了用于从数据库检索所有附加数据的id之外,我不会在索引中存储数据。在我的情况下,标准分析器和查询解析器会工作得很好吗?还是应该采取更多的定制方法


我是Lucene的新手,我刚刚了解到它的强大功能,所以我并不反对真正进入它并创建一些复杂的自定义搜索查询,但是我需要一些指导,如果没有必要的话,我想避免做所有这些。

使用单个搜索字段是最有效的解决方案。这将使您的索引更小,搜索速度更快。即使您存储了字段,您仍然可以有一个用于搜索的聚合索引(但未存储)字段,以及一个用于每个联系人信息的存储(但未索引)字段

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

  • 独立于变音符号()给出相同结果的查询
  • 处理电话号码中的空格(以便查询“0532”时匹配“0532”和“0532”)

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


      您可以使用多字段查询来搜索所有字段,如姓名、地址、城市……

      KISS-根据当前给定的要求,从简单性、空间和搜索速度方面来看,单个“一网打尽”字段是最佳选择。此外,现代用户不需要指定搜索哪个字段。他们想让系统通过谷歌搜索栏自己找出答案。