使用 Hibernate Search 时“过滤查询不支持排序”

青年同胞

我正在尝试发出一个查询,其中包括从 Hibernate Search5.7.1.Final到 ElasticSearch 的排序2.4.2

当我使用 curl 时,我得到了结果:

curl -XPOST 'localhost:9200/com.example.app.model.review/_search?pretty' -d '
{
    "query": { "match" : { "authors.name" : "Puczel" } },
    "sort": { "title": { "order": "asc" } }
}'

但是当我从代码发出查询时:

protected static Session session;

public static void prepareSession()
{
    SessionFactory sessionFactory = new Configuration().configure()
        .buildSessionFactory();
    session = sessionFactory.openSession();
}

...

protected static void testJSONQueryWithSort()
{
    FullTextSession fullTextSession = Search.getFullTextSession(session);
    QueryDescriptor query = ElasticsearchQueries.fromJson(
        "{ 'query': { 'match' : { 'authors.name' : 'Puczel' } }, 'sort': { 'title': { 'order': 'asc' } } }");
    List<?> result = fullTextSession.createFullTextQuery(query, Review.class).list();

    System.out.println("\n\nSearch results for 'author.name:Puczel':");
    for(Object object : result)
    {
        Review review = (Review) object;
        System.out.println(review.toString());
    }

}

我得到一个例外:

"[filtered] query does not support [sort]"

我了解它的来源,因为 Hibernate Search 问题的查询与我的curl查询不同- 指定类型的实现方式不同:

{
    "query":
    {
        "filtered":
        {
            "query":
            {
                "match":{"authors.name":"Puczel"}
            },
            "sort":{"title":{"order":"asc"}},
            "filter":{"type":{"value":"com.example.app.model.Review"}}
        }
    }
}

但我不知道如何改变它。

我尝试使用 Hibernate 文档中的排序示例:https : //docs.jboss.org/hibernate/search/5.7/reference/en-US/html_single/#__a_id_elasticsearch_query_sorting_a_sorting

但是这个例子并不完整。我不知道:

  • 要使用哪些进口(有多个匹配),
  • 未声明变量的类型是什么,例如s
  • 如何初始化变量luceneQuery

我将不胜感激对此的任何评论。

罗迪埃

是的,正如在 javadoc 中提到的org.hibernate.search.elasticsearch.ElasticsearchQueries.fromJson(String)

请注意,仅支持 'query' 属性。

所以你必须使用 Hibernate Search API 来执行排序。


要使用哪些进口(有多个匹配),

Sort 来自 Lucene ( org.apache.lucene),List来自java.util,所有其他导入都应该来自 Hibernate Search ( org.hibernate.search)。

未声明变量的类型是什么,例如 s

s是一个FullTextSession检索通过org.hibernate.search.Search.getFullTextSession(Session)它也适用于FullTextEntityManager检索到的org.hibernate.search.jpa.Search.getFullTextEntityManager(EntityManager).

如何初始化变量 luceneQuery

您必须使用查询构建器 ( qb):

Query luceneQuery = qb.keyword().onField("authors.name").matching("Puczel").createQuery();

如果你打算使用 Hibernate Search API,并且你还不习惯它,我建议你先阅读通用文档(不仅仅是 Elasticsearch 部分,它只提到了 Elasticsearch 的细节):https://docs.jboss .org/hibernate/search/5.7/reference/en-US/html_single/#search-query

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Hibernate Search查询类

使用Hibernate Search自动完成

使用Hibernate Search查询枚举(枚举)的IndexedEmbedded列表

Hibernate Search查询多个实体

使用Hibernate Search / Lucene标记云?

将 EntityGraph 与 Hibernate Search ORM 结合使用

Hibernate Search:如何正确使用通配符?

如何使用Hibernate Lucene Search进行不区分大小写的挪威字符(Æ,Ø和Å)排序?

如何使用Hibernate Lucene Search访问实体中外键的排序字段名称?

尚不支持Hibernate Pure本机标量查询

Hibernate Search 6中LocalDateTime的范围查询

Hibernate Search直接计数,而不是使用Lucene和Elasticsearch进行常规查询

使用Hibernate Search查询并获得所有项目而无需分页

使用 Hibernate Search 时由于 lucene 锁导致 Spring Boot 集成测试失败

使用AWS DocumentClient少于次要索引查询时-“不支持查询关键条件”

使用zip()对元组列表进行排序时,有时不支持'<'

无法使用 Hibernate Search 搜索子实体

Hibernate Search的用法,何时使用以及为什么

使用投影可以提高Hibernate Search索引的构建性能吗?

如何在Hibernate Search中正确使用@ContainedIn批注?

使用多个关键字进行Hibernate Search的索引搜索

在数据库中搜索文本(使用Hibernate Search)

使用 Elasticsearch 禁用 Hibernate Search 的索引映射创建

如何在Hibernate Search中使用Wordnet同义词?

如何使用Hibernate-Search索引和搜索ENUM类型

集合上的Hibernate Search(Lucene)过滤器

无法使用WebApp启动tomcat7(Spring + Hibernate + Hibernate Search 4.5)NoClassDefFound:CorruptIndexException

Hibernate Search 5.0数值Lucene查询HSEARCH000233问题

Hibernate Search - 在查询上应用 facet 不会返回任何结果

TOP 榜单

热门标签

归档