嵌套对象的功能评分

时间:2016-02-09 02:34:10

标签: elasticsearch

我的索引pcap_activate()包含以下blogsettings

mappings

我想根据相关性和访问者的上次访问对帖子进行排名。我尝试了这个查询没有成功。似乎高斯函数无法获得PUT /blog { "settings": { "index": { "number_of_shards": "1" } }, "mappings": { "post": { "_all": { "enabled": false }, "properties": { "title": { "type": "string" }, "content": { "type": "string" }, "visitor": { "type": "nested", "properties": { "id": { "type": "string", "index": "not_analyzed" }, "last_visit": { "type": "date", "format": "yyyy-MM-dd" } } } } } } } ' s visitor的值。如何使这个工作?

last_visit

1 个答案:

答案 0 :(得分:0)

这是一个匹配名称的查询,该名称使用我对特定用例的嵌套对象。我没有使用任何日期字段,但正如我所说,它确实使用嵌套对象。我使用距离的相关性和文本匹配,所以它是相似的。

我使用了这个问题的答案来构建我的查询,因为它符合我的尝试。 Scoring documents by text match and distance

GET dev_search_core_data/_search?size=200
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "NAME": "Amy Smith"
          }
        },
        {
          "bool": {
            "must": [
              {
                "function_score": {
                  "query": {
                    "nested": {
                      "path": "LOCATION",
                      "query": {
                        "term": {
                          "LOCATION.SOME_IND": {
                            "value": true
                          }
                        }
                      }
                    }
                  },
                  "functions": [
                    {
                      "gauss": {
                        "LOCATION.COORDINATES": {
                          "origin": "-118.309, 34.041",
                          "scale": "50km",
                          "offset": "10km",
                          "decay": 0.5
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

我认为问题在于查询的结构。我总是首先运行此命令来验证我的查询,如果我有任何问题,以消除任何语法问题。

GET dev_search_core_data/_validate/query?explain

这是结果:

{
   "valid": true,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "explanations": [
      {
         "index": "dev_search_core_data_b",
         "valid": true,
         "explanation": "filtered((NAME:amy NAME:smith) (+function score (ToParentBlockJoinQuery (filtered(LOCATION.SOME_IND:true)->random_access(_type:_LOCATION)),function=org.elasticsearch.index.query.functionscore.DecayFunctionParser$GeoFieldDataScoreFunction@274227b9)))->cache(org.elasticsearch.index.search.nested.NonNestedDocsFilter@1012ada6)"
      }
   ]
}

我还查看了文档,深入解释了function score的工作原理。你没有提到你的版本,但我使用的是ES 1.6。