【问题标题】:Elastic Search Sort - return sort-fields in response弹性搜索排序 - 返回排序字段作为响应
【发布时间】:2017-04-26 01:17:12
【问题描述】:

我需要将排序配置作为响应的一部分,所以假设我有这个查询

{ sort: [ {"name":"asc"},{"age:"descr"}]}

我需要将此作为响应的一部分,以使我的构面/ui 状态与该排序同步。我看到有一个“排序”响应字段,但它基本上列出了为排序选择的值,但没有列出哪个字段和哪种排序类型。

阅读文档我不确定是否应该是这种情况https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_sort_values

在网络上找不到任何关于此的内容,很多如何排序示例,也在堆栈上,但没有关于如何在响应中反映排序。

如果重要的话,我目前使用的是 Elasticsearch 2.4

【问题讨论】:

  • 关于我们正在处理分面搜索,我当然试图从服务器解析搜索的“状态”,而不是将其保留在客户端上。特别是。当您处理竞争条件时,例如在短时间内发送多个请求(切换排序),只有最新的会反映在 UI 中,您不确定响应将按什么顺序返回 - 因此您的 UI 可能与实际响应不匹配。除此之外,我并没有要求“概念指导”,因此您的回答只是开始了不同的讨论:)

标签: sorting elasticsearch lucene


【解决方案1】:

这实际上是不可能的。

我使用中间件解决了这个问题。所以当客户端想要在 ES 上搜索时,就是这样发生的

client -> middleware -> ES

为了在响应中包含排序,中间件会做这样的事情

result = es.search(query)
result['sort'] = query['sort'] if query.key?('sort')
return result

所以我将请求中的排序字段复制到响应中,这实际上对客户端非常有用,在处理聚合/分面搜索时

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2017-02-09
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多