【问题标题】:ElasticSearch scoring parent documents by child field with default valuesElasticSearch 按具有默认值的子字段对父文档进行评分
【发布时间】:2013-11-09 05:49:13
【问题描述】:

假设我有一些名为“room”的父文档,以及一些名为“person”且带有“age”字段的子文档。现在我想使用 ES 中的 custom_score 查询使用年龄字段对一些房间进行评分。

我已经使查询几乎按预期工作,唯一的问题是:空房间(没有子文档)没有得分。我怎样才能给他们一个默认分数或其他东西。在这个例子中,我想给 room_id 为 1~5 的五个房间打分。如果房间 4 没有子文档,则不计分。查询只会命中 4 条具有预期分数的记录。我想要的是给空房间一个默认分数。也许函数分数查询适合这种情况,但我使用 NEST 作为当前不支持函数分数查询的 .NET 客户端。

顺便说一句:SO 的 CSS 在这里不起作用,我不知道为什么。如果这篇文章格式不正确,请帮忙编辑,谢谢。

{
  "query": {
    "custom_score": {
      "script": "_score",
      "query": {
        "filtered": {
          "query": {
            "has_child": {
              "type": "person",
              "score_type": "sum",
              "query": {
                "custom_score": {
                  "script": "doc['person.age'].value - 50d",
                  "query": {
                    "match_all": {}
                  }
                }
              }
            }
          },
          "filter": {
            "bool": {
              "should": [
                {
                  "terms": {
                    "room_id": [ "1", "2", "3", "4", "5" ]
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    您的has_child 过滤器使其仅包含有孩子的父记录,但您想要所有父记录。您可以使用带有两个 should 子句的 bool should 查询:

    • 有孩子的记录(musthas_childcustom_score 计算)
    • 没有孩子的记录(must_nothas_child 和默认分数)
    { “询问”: { “custom_score”:{ “脚本”:“_score”, “询问”: { “过滤”:{ “询问”: { “布尔”:{ “应该” : [ { “布尔”:{ “必须” : { “有孩子”:{ “类型”:“人”, “score_type”:“总和”, “询问”: { “custom_score”:{ "script": "doc['person.age'].value - 50d", “询问”: { “匹配全部”:{} } } } } } } }, { “布尔”:{ “一定不” : { “有孩子”:{ “类型”:“人”, “询问”: { “匹配全部”:{} } } } } } ] } }, “筛选”: { “布尔”:{ “应该”: [ { “条款”:{ "room_id": ["1","2","3","4","5"] } } ] } } } } } } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多