2

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

我目前仅过滤“活动”布尔值以仅获取已发布的项目:

    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
          }
      ]
    }
  }
}

但是,这似乎不起作用:“函数列表中的一个条目缺少一个函数”。所以我添加"weight": 1到有源过滤器中。但现在它说它无法解析。

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

不知道如何进行。一些见解会很棒。

4

1 回答 1

2

您应该能够在功能分数旁边使用过滤查询来实现这一点

例子:

{
   "query": {
      "filtered": {
         "query": {
            "function_score": {
               "query": {
                  "match": {
                     "_all": "hospitality"
                  }
               },
               "functions": [
                  {
                     "filter": {
                        "term": {
                           "search_type": "Market"
                        }
                     },
                     "weight": 2
                  }
               ]
            }
         },
         "filter": {
            "term": {
               "active": true
            }
         }
      }
   }
}
于 2015-09-10T18:42:59.613 回答