为多个字段构建Lucene查询

时间:2019-03-13 22:04:22

标签: java lucene

我有一个具有搜索功能的spring MVC应用程序。

  

流:UI>控制器> BL>数据> SOLR

允许用户使用多个字段搜索内容,例如按名称或部门搜索。业务层需要有一个Lucene查询生成器,该生成器接受字符串并为SOLR构建适当的Lucene查询。

我的控制器:

@GetMapping(params = "name")
public Page<User> findUserByName(@RequestParam("name") final String name) {
    return userService.findUserByName(name);
}

@GetMapping(params = "department")
public Page<User> findUserByDepartment(@RequestParam final String department) {
    return userService.findUserByFulltext(department);
}

虚拟查询生成器

public String searchByNameQuery(final String name) {
    return "nm:" + name;
}
public String searchByDepartmentQuery(final String department) {
    return "dpt:" + department;
}

现在,该虚拟查询构建器不支持通配符或任何其他变体。我正在阅读Apache Lucene Query API(也添加了Lucene core 7.7.1进行项目开发)和大量文章,这些文章教您如何使用不同类型的Query实现(TermQuery,PhraseQuery,BooleanQuery等),但没有完全有意义。最后,我仍然手动构建查询。

有人可以帮助我显示如何拥有适当的Lucene查询生成器类吗?

我需要使用准确的词组和通配符为这些类型的文本生成查询

(exact)Search by name: Ohio State University
Search by name: *State
Search by name: Ohio*University
Search by name: Ohio State*
Search by Department:Computer Science Dept
Search by Department: *Science

组合查询:

nm:"Ohio State University" AND dpt:"Computer Science"

1 个答案:

答案 0 :(得分:0)

布尔查询生成器可以像这样使用:

1 subgoal
______________________________________(1/1)
forall n m : nat, n = m -> n + n = m + m

如果您希望对字段和搜索字符串进行复杂的聚合,则可以编写类似-

->