【发布时间】:2019-03-13 22:04:21
【问题描述】:
我有一个带有搜索功能的 Spring MVC 应用程序。
流程:UI > 控制器 > BL > 数据 > SOLR
允许用户使用多个字段搜索内容,例如按姓名或部门搜索。业务层需要有一个 Lucene Query Builder,它接受字符串并为 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 添加到项目中)和一堆教授如何使用不同类型的查询实现(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"
【问题讨论】:
-
new WildcardQuery(new Term("fieldName", "wildcardSearchstring")).toString()
-
我确实喜欢这个 - 查询 q = new WildcardQuery(new Term("nm","helloworld"));结果是 nm:helloworld。我需要它是 nm:hello\\world
-
对组合(布尔运算符)查询有什么建议吗?
-
您可以有一个 BooleanQuery,它使用布尔查询添加接受多个通配符查询。