我正在尝试发出一个查询,其中包括从 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] 删除。
我来说两句