Java spring mvc Hibernate搜索查询

Java spring mvc Hibernate搜索查询,java,mysql,spring,hibernate,spring-mvc,Java,Mysql,Spring,Hibernate,Spring Mvc,我正在使用spring,使用hibernate、maven和mysql,试图为电影和演员创建一个简单的网站。我想要的是一种搜索方法,在其中键入一个单词或单词/名称的一部分,您将得到一些结果,这是我的查询: @Transactional public List<Movie> searchForMovie(String searchText) { FullTextSession fullTextSession = Search.getFullTextSession(getSess

我正在使用spring,使用hibernate、maven和mysql,试图为电影和演员创建一个简单的网站。我想要的是一种搜索方法,在其中键入一个单词或单词/名称的一部分,您将得到一些结果,这是我的查询:

@Transactional
public List<Movie> searchForMovie(String searchText) {
    FullTextSession fullTextSession = Search.getFullTextSession(getSession());

    QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Movie.class).get();
    org.apache.lucene.search.Query query = qb.keyword().onFields("year", "title").matching(searchText)
            .createQuery();

    org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(query, Movie.class);

    List<Movie> results = hibQuery.list();
    return results;
}

如您所见,我使用的是“关键字”,这意味着您必须搜索整个单词/名称,而不是其中的一部分。例如,如果我想找到电影“饥饿游戏”,我必须键入“饥饿”或“游戏”,我想要的是可以只写“饥饿”并且仍然得到结果。我似乎找不到这样的查询,想法?

只需将您的.matching行更改为以下内容:

.matching("*"+searchText+"*")
使用通配符以您认为合适的任何组合获得结果


希望对您有用。

只需将您的.matching行更改为以下内容:

.matching("*"+searchText+"*")
使用通配符以您认为合适的任何组合获得结果


希望这对您有用。

您可以使用hibernate通配符查询

? - represents a single character
* - represents any character sequence.
还请注意,为了提高性能,建议查询不要以?或者是*

   QueryBuilder qb = fullTextSession.getSearchFactory()
                .buildQueryBuilder().forEntity(Movie.class).get();
        org.apache.lucene.search.Query query = qb
                .keyword().wildcard().onFields("year", "title")
                .matching(searchText + "*")
                .createQuery();
请参阅hibernate文档以获取完整参考。 5.1.2.3通配符查询。

您可以使用hibernate通配符查询进行此操作

? - represents a single character
* - represents any character sequence.
还请注意,为了提高性能,建议查询不要以?或者是*

   QueryBuilder qb = fullTextSession.getSearchFactory()
                .buildQueryBuilder().forEntity(Movie.class).get();
        org.apache.lucene.search.Query query = qb
                .keyword().wildcard().onFields("year", "title")
                .matching(searchText + "*")
                .createQuery();
请参阅hibernate文档以获取完整参考。 5.1.2.3通配符查询。

您可以在关键字上使用Hibernate搜索的fuzzySearch。您的代码如下所示:

QueryBuilder qb = fullTextSession.getSearchFactory()
           .buildQueryBuilder().forEntity(Movie.class).get();

         org.apache.lucene.search.Query query = qb
           .keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1).onFields("year","title")
           .matching(searchText)
           .createQuery();
请参阅hibernate文档以获取完整参考

5.1.2.2模糊查询。

您可以在关键字上使用Hibernate搜索的fuzzySearch。您的代码如下所示:

QueryBuilder qb = fullTextSession.getSearchFactory()
           .buildQueryBuilder().forEntity(Movie.class).get();

         org.apache.lucene.search.Query query = qb
           .keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1).onFields("year","title")
           .matching(searchText)
           .createQuery();
请参阅hibernate文档以获取完整参考

5.1.2.2模糊查询。

谢谢你们,这非常好用!我以前尝试过使用通配符,但没有使用“*”。。谢谢谢谢你们,这很好用!我以前尝试过使用通配符,但没有使用“*”。。谢谢