hibernate - Hibernate Search 查询名字和姓氏
问题描述
我正在使用 Hibernate Search 在我的数据库中查找人。
他们已经索引了 firstName 和 lastName 字段。
我想要看起来像这样的结果:
搜索:“长袍保罗”
匹配:
- 罗伯特·保尔森
- 保罗·罗伯逊
不应该匹配:
- 罗伯特·罗伯逊
- 罗伯特·亨德里克斯
- 安娜保尔森
虽然像“Rob”这样的搜索
应该匹配:
- 罗伯特·保尔森
- 保罗·罗伯茨
- 罗伯茨
我的代码如下所示:
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
Query query = fullTextEntityManager
.getSearchFactory()
.buildQueryBuilder()
.forEntity(Customer.class)
.overridesForField("firstName", "edgeNGram_query")
.overridesForField("lastName","edgeNGram_query")
.get()
.simpleQueryString()
.onFields("firstName","lastName")
.matching(text)
.createQuery();
我希望有人能启发我。
解决方案
考虑到搜索很简单,因为您只匹配名字和姓氏,我将解析输入并*
在每个标记(如果尚未存在)之后添加一个以触发通配符搜索。
使用简单的查询字符串查询是要走的路,所以你走在正确的轨道上,但你需要添加一个.withAndAsDefaultOperator()
,以便所有搜索的单词都是必需的。
推荐阅读
- php - 我找不到我的 PHP 代码有什么问题。任何人都可以看到错误吗?
- javascript - 为什么 jQuery 不能修改 svg 元素的宽度/高度标签属性,但可以与其他属性一起正常工作?
- c# - 发布到 IIS 时无法从 DotNetCore 调用 .NET 4.6.1 项目
- kubernetes - RoleBinding 和 ClusterRoleBinding 中的 Kubernetes RBAC apiGroup 字段
- azure - 如何使用 powershell 获取 azure vm 的负载均衡器名称?
- css - 为什么父 DIV 会调整大小,而子元素仍有向下移动的空间?
- selenium - 通过 selenium 运行 chrome
- clips - Clips:对要搜索的向量变量的限制
- windows - 某些应用程序(Eclipse、Notepad++、MSSQL)中的汉字大小不同
- javascript - 在 iframe 中使用时是否会影响选项卡行为?