查询:ElasticSearch中的文档属性中有多少个数组元素匹配

时间:2016-06-28 15:33:36

标签: elasticsearch

我的许多文档的属性都是这样的值数组:

{
   "_index": "myindex",
   "_type": "mytype",
   "_id": "myid1",
   "_source": {
      "tags": [
         "devid",
         "batman",
         "obama"
      ]
   }
},    
{
   "_index": "myindex",
   "_type": "mytype",
   "_id": "myid2",
   "_source": {
      "tags": [
         "devid",
         "superman"
      ]
   }
}

我有一系列元素,例如:["devid", "batman", "pippo"]

我想让所有匹配至少一个数组元素的文档,按匹配的元素数量排序。 例如,我希望myid1得分高于myid2

我该怎么做?

此刻我被困了#34;在这里:

{ 
  "query": {
    "function_score": {
      "query": {
        "filtered": {
          "query": {
            "match_all": {}
          },
          "filter": {
            "terms": {
              "tags": ["devid", "batman", "pippo"]
            }
          }
        }
      }
    }
  }
}

它只按术语过滤,并将1设为两者的分数。

noob 有弹性搜索欢迎任何提示!

1 个答案:

答案 0 :(得分:1)

使用terms query代替过滤器会导致包含更多字词匹配的文档获得更高分数。

示例:

   {
   "query": {
      "terms": {
         "tags": [
            "devid",
            "batman",
            "pippo"
         ]
      }
   }
}