按嵌套字段排序

时间:2016-08-11 15:58:23

标签: database elasticsearch

我的弹性类型包含具有此结构的文档

{
  "name": "Foo Bar",
  "myTags": [
    {
      "id": 3,
      "name": "My tag 1"
    },
    {
      "id": 5,
      "name": "My Tag 5"
    },
    {
      "id": 7,
      "name": "My Tag 7"
    }
  ]
}

现在,给定3个标签我希望按匹配标签的数量排序所有文档。首先是匹配所有3个标签的文件,而不是那些匹配2然后是1个标签的文件。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用function_score

执行此操作
{
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      }, 
      "functions": [
        {
          "filter": {
            "nested": {
              "path": "myTags",
              "query": {
                "term": {
                  "myTags.name": "My Tag 1"
                }
              }
            }
          },
          "weight": 1
        },
        {
          "filter": {
            "nested": {
              "path": "myTags",
              "query": {
                "term": {
                  "myTags.name": "My Tag 5"
                }
              }
            }
          },
          "weight": 1
        },
        {
          "filter": {
            "nested": {
              "path": "myTags",
              "query": {
                "term": {
                  "myTags.name": "My Tag 7"
                }
              }
            }
          },
          "weight": 1
        }
      ],
      "boost_mode": "sum", 
      "score_mode": "sum"
    }
  }
}