当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch按字段存在度排序

许展鹏
2023-03-14

我想按字段存在对我的ES搜索结果进行排序,假设我得到了字段“价格”,并希望所有有价格的结果都在顶部,所有没有价格的结果都在底部。我知道你可以做一个简单的排序并添加“缺失”:“_last”,例如:

{“sort”:[{price':{missing':'u last',order':'asc'}}]}

但在这种情况下,结果也将按价格排序,我不想要它。

没有脚本有办法做到吗?

共有1个答案

龙骏
2023-03-14

可以使用函数分数来实现这一点。
这将涉及使用权重来降低不包含特定字段的文档的分数。

例子:

{
   "query": {
      "function_score": {
         "functions": [
            {
               "weight": 0.5,
               "filter": {
                  "missing": {
                     "field": "price"
                  }
               }
            }
         ],
         "query": {
            "match_all": {}
         }
      }
   }
}

这将导致具有字段价格的文档显示更高。

 类似资料:
  • 问题内容: 我的方法有问题。例如,我有带有Text()的索引字段: 当我尝试执行带有排序的搜索查询时,出现错误: elasticsearch.exceptions.RequestError:TransportError(400,’search_phase_execution_exception’,’默认情况下,文本字段上的字段数据是禁用的。在[title]上设置fielddata = true以便

  • 问题内容: 我正在通过NEST c#使用ElasticSearch。我有很多关于人的信息 我希望能够按lastName以及长度的顺序对项目列表进行过滤和排序,因此名称中只有5个字符的人会出现在结果集的开头,然后是10个字符的人。 所以我想用一些伪代码做类似的事情 我是ElasticSearch的新手,所以任何示例都将非常有帮助。 问题答案: 您可以使用基于脚本的排序进行排序。 作为一个玩具示例,我

  • 问题内容: 我有一些带有名称字段的文档。我正在使用名称字段的分析版本进行搜索和排序。排序是在一个级别上进行的,即名称首先是按字母顺序排序的。但是在字母列表中,名称是按字典顺序而不是按字母顺序排序的。这是我使用的映射: 谁能提供相同的解决方案? 问题答案: 深入研究Elasticsearch文档,我偶然发现了这一点: 排序和排序规则 不区分大小写的排序 假设我们有三个用户文档,其名称字段分别包含Bo

  • 问题内容: 我正在尝试获取所有用户,并通过另一个表上的字段对他们进行排序,但是此字段并不总是存在吗? 用户-持有用户用户元-持有元数据,特别是“权重”,这是我要根据其排序的内容。 一个更具体的解决方案是自动为它们定义默认权重,但是无论如何,我可以使它不起作用吗?当前工作查询: 失去部分订单,任何/所有帮助将不胜感激! 问题答案: 如果您在表()之间具有关键关系,并且想要列出所有用户,则可以使用类似

  • 问题内容: 这是一个表结构(例如测试): 查询如下: 但是我想按 字段大小/ 字段描述的 长度 排序。字段类型将为TEXT或BLOB。 问题答案: 该函数以字节为单位给出字符串的长度。如果要计算(多字节)字符,请改用以下函数:

  • 问题内容: 我试图获取记录在“标题”中,然后是X个字符。 注意:并非所有记录都包含标题字段。 我努力了: 结果,我得到这个错误: 我该如何解决? 问题答案: 您需要考虑到某些文档可能具有空字段。因此,您可以使用常规的空安全运算符。另外,请确保改用POST方法: