Spring Hibernate全文搜索匹配
我有两个名为“Alex”和“Andrei”的用户。当我编写类似“A”的查询时,我得到0个结果。我必须用全名和匹配的大写字母搜索才能得到结果 例如,我只想查询'e'端接收2条记录Spring Hibernate全文搜索匹配,spring,hibernate,lucene,full-text-search,hibernate-search,Spring,Hibernate,Lucene,Full Text Search,Hibernate Search,我有两个名为“Alex”和“Andrei”的用户。当我编写类似“A”的查询时,我得到0个结果。我必须用全名和匹配的大写字母搜索才能得到结果 例如,我只想查询'e'端接收2条记录 Session s = session.getCurrentSession(); FullTextSession fullTextSession = Search.getFullTextSession(s); QueryBuilder qb = fullTextSession.getSearc
Session s = session.getCurrentSession();
FullTextSession fullTextSession = Search.getFullTextSession(s);
QueryBuilder qb = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(User.class).get();
org.apache.lucene.search.Query q = qb
.keyword().onFields("name")
.matching(query)
.createQuery();
org.hibernate.Query hibQuery =
fullTextSession.createFullTextQuery(q, User.class);
List<User> results = hibQuery.list();
您没有显示如何为名字编制索引。这同样重要。例如,如果存储未分析的索引,则需要考虑资本化。同样如中所述,您需要查看正确的分析器。只有在使用通配符查询时,您的案例才会起作用
从另一个角度讲,我不知道您的示例与实际用例有多接近,但搜索单个字符可能不是典型的自由文本搜索用例。这一特定行为提醒了我一次遇到的错误 “A”是Hibernate Search的标准分析器使用的英语中的停止词,因此您必须精确定义没有此停止词的自定义分析器 这些链接可以帮助你 要使用自定义分析器,请执行以下操作:
要理解我用“a”作为停止词的意思:分析听起来像是你的问题。您应该仔细阅读以下内容:。我真的不明白为什么查询e会找到Alex。我想,也许可以研究一下ngram分析。。。