使用Lucene搜索多个字段

时间:2011-04-06 13:48:17

标签: java search lucene

我正在尝试实施的搜索遇到一些麻烦。我需要用户能够将搜索查询输入到Web界面中,并且后端Java需要在许多字段中搜索查询。这方面的一个例子可能是最好的:

假设我有一个包含“Person”对象的List。假设每个对象包含关于此人的两个字符串字段:

FirstName:  Jack
Surname:    Smith

FirstName   Mary
Surname:    Jackson

如果用户输入“jack”,我需要搜索以匹配两个对象,第一个在Surname上,第二个在FirstName上。

我一直在考虑使用MultiFieldQueryParser,但无法正确设置字段。任何帮助或指向一个好的教程将不胜感激。

1 个答案:

答案 0 :(得分:3)

正如你所说,

MultiFieldQueryParser就是你想要的。

确保:

  • 字段名称始终使用
  • 两个字段以及查询解析器上都使用相同的Analyzer
  • 默认情况下,您不会找到部分字词,因此如果搜索jack,您将找不到jackson。 (在这种情况下,您可以搜索jack*。)

关于字段名称,我总是为我的字段名称设置enum,然后使用例如将字段名称传递给Lucene时MyFieldEnum.firstname.name(),如果我犯了拼写错误,编译器就可以捕获它,而且它也是放置Javadoc的好地方,这样你就可以看到字段的用途,还有一个地方您可以在Lucene文档中看到您希望支持的完整列表。