gpt4 book ai didi

sorting - 使用Hibernate Search时“filtered query does not support sort”

转载 作者:行者123 更新时间:2023-12-03 01:44:15 25 4
gpt4 key购买 nike

我正在尝试发出包含排序的查询
从Hibernate搜索5.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());
}

}

我得到一个异常(exception):
"[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文档中的sort示例:
https://docs.jboss.org/hibernate/search/5.7/reference/en-US/html_single/#__a_id_elasticsearch_query_sorting_a_sorting

但是这个例子并不完整。我不知道:
  • 使用哪个导入(有多个匹配项),
  • 未声明变量的类型是什么,例如s
  • 如何初始化变量luceneQuery

  • 我将不胜感激。

    最佳答案

    是的,如org.hibernate.search.elasticsearch.ElasticsearchQueries.fromJson(String)的javadoc所述:

    Note that only the 'query' attribute is supported.



    因此,您必须使用Hibernate Search API进行排序。

    which imports to use (there are multiple matching),



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

    what are the types of the undeclared variables, like s


    s是通过 FullTextSession检索的 org.hibernate.search.Search.getFullTextSession(Session)。它也可以与通过 FullTextEntityManager检索的 org.hibernate.search.jpa.Search.getFullTextEntityManager(EntityManager)一起使用。

    how to initalise the variable 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

    关于sorting - 使用Hibernate Search时“filtered query does not support sort”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281683/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com