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

在elasticsearch中对包含空值的嵌套字段进行排序

巴博耘
2023-03-14

我试图在elasticsearch中对嵌套字段进行排序,但在按升序排序时,它总是在排序列表的顶部显示带有空值嵌套字段的文档。我希望排序(升序和降序),并希望空值嵌套字段文档出现在排序列表的末尾。

这是我正在使用的排序查询:

{
  "query": {
    "match_all": {}
  },
  "sort": {
    "_script": {
      "type": "string",
      "order": "asc",
      "script": {
        "lang": "painless",
        "source": "def val=params['_source'].tags; if(val==null){return '';}else{return params['_source'].tags} "
      }
    }
  }
}

下面是我应用的与嵌套的“标记”字段相关的映射:

"tags": {
            "type": "nested",
            "properties": {
              "tag": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                },
                "analyzer": "index_analyzer",
                "search_analyzer": "search_analyzer"
              }
            }
          }

样品有效载荷:

"tags": [
  {
    "tag": "check"
  },
  {
    "tag": "production"
  },
  {
    "tag": "test"
  }
]

共有1个答案

文嘉禧
2023-03-14

由于标记是一个嵌套属性,您需要对其应用嵌套排序,并且要使没有标记的文档在结果列表中最后一个,您只需添加以使用缺少的属性。

注意:我们在标签的子字段关键字中排序,因为不需要分析排序关键字。

下面是示例查询:

{
    "query": {
        "match_all": {}
    },
    "sort": [
        {
            "tags.tag.keyword": {
                "order": "asc",
                "missing": "_last",
                "nested": {
                    "path": "tags"
                }
            }
        }
    ]
}

由于您是在多值文本字段上排序,我建议您查看有关排序模式的排序文档部分,以更好地了解elasticsearch在这种情况下的行为。

希望有帮助!

 类似资料:
  • Sup社区。我有个问题。我正在使用Elasticsearch 6.4 我的数据结构的一部分: 我需要得到按成本排序的文档desc,我需要排序dirs字段中的值date_by字段与nulls-first。 如何对嵌套字段内的值进行排序,而不按此嵌套字段对文档进行排序?

  • 问题内容: 我正在使用以下映射: 文件范例: 我的问题是如何检索此文档并按“日期”对嵌套对象“注释”进行排序?结果: 问题答案: 您需要在inner_hits上对进行排序。这将为您提供所需的输出 我使用的源过滤得到的只有作为将被检索里面,但你能避免,如果你想 是5,因为默认值为3,并且在给定的示例中我们有4个对象。 希望这可以帮助!

  • 我将Elasticsearch 6与PHP结合使用。 我的文档有一个嵌套字段,如下所示: 基本上每个文档都有很多价格,但我知道每个文档只有一个价格与过滤器/查询匹配。 我用它来搜索和排序,改编自这里的教程:https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-sorting.html(对PHP数组格式表示抱歉): 我得

  • 问题内容: 我有以下字典。 如何根据排序。因此,结果字典将如下所示。 问题答案: 从订购的项目元组列表构造一个: (假设Python 3,在Python 2中应该做同样的事情。)

  • 问题内容: 我正在尝试在ElasticSearch中运行类似的字段查询: 意思是我正在尝试查找所有文档,其中产品名称在这种情况下是’milk’的子字符串。 我该怎么做? 问题答案: 我会使用一个使用ngrams的自定义分析器。首先创建一个像这样的索引: 然后,您可以索引一些数据: 最后,您可以像这样搜索: 然后您将获得前两个文档,

  • 问题内容: 可以说我有以下映射: 然后,我对父文档进行“ _geo_distance”排序,并能够对“ site.point”上的文档进行排序。但是,我还希望嵌套位置在父文档中按“ _geo_distance”排序。 这可能吗?如果是这样,怎么办? 问题答案: 不幸的是,没有(至少现在还没有)。 ElasticSearch中的查询仅标识与该查询匹配的文档以及它们的匹配程度。 要了解嵌套文档的用途,