为 Elasticsearch 查询添加提升

Adding boost to Elasticsearch query

我正在尝试为 Elasticsearch 的某些结果增加权重。

我目前仅过滤 'active' 布尔值以仅获取已发布的项目:

    query: {
      filtered: {
        query: {
          match: {
            _all: params[:q]
          }
        },
        filter: {
          term: {
            active: true
          }
        }
      },
    }

我现在想为我的一些模型增加重量。例如,市场应该获得 +2 提升。我正在尝试这样的事情:(search_type 是我结果中的一个字段,它基本上是 Rails 模型名称)

POST _search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "_all": "hospitality"
        }
      },
      "functions": [
          {
            "filter": {
            "term": {
              "active": true
            }
          }
          },
          {
            "filter": {
                "term": {
                    "search_type": "Market"   
                }
            },
            "weight": 2
          }
      ]
    }
  }
}

但是,这似乎不起作用:"One entry in functions list is missing a function"。所以我添加了 "weight": 1 到活动过滤器..但是现在它说它无法解析.

我没有使用 ElasticSearch 的经验,文档也很混乱。我也尝试过使用 custom_filters_score 东西,但这似乎不适用于我的 ES 版本(如此处所述:http://jontai.me/blog/2013/01/advanced-scoring-in-elasticsearch/)。我尝试的另一个选择是将布尔查询与 must 和 should 结合起来,但返回零结果...

不确定如何进行。一些见解会很棒。

你应该能够使用 filtered query 和功能分数来实现这个

示例:

{
   "query": {
      "filtered": {
         "query": {
            "function_score": {
               "query": {
                  "match": {
                     "_all": "hospitality"
                  }
               },
               "functions": [
                  {
                     "filter": {
                        "term": {
                           "search_type": "Market"
                        }
                     },
                     "weight": 2
                  }
               ]
            }
         },
         "filter": {
            "term": {
               "active": true
            }
         }
      }
   }
}