Spring Hibernate全文搜索匹配

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

我有两个名为“Alex”和“Andrei”的用户。当我编写类似“A”的查询时,我得到0个结果。我必须用全名和匹配的大写字母搜索才能得到结果

例如,我只想查询'e'端接收2条记录

    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分析。。。