elasticsearch,Node.js,elasticsearch" /> elasticsearch,Node.js,elasticsearch" />

Node.js 基于布尔字段提升结果

Node.js 基于布尔字段提升结果,node.js,elasticsearch,Node.js,elasticsearch,我在不同的商店里有成吨的商品。其中一些文章是自有品牌的文章,在我的elasticsearch搜索结果中排名应该高于其他文章(但应显示自有品牌和非自有品牌。) 我已经尝试了不同的方法来处理字段\值\因子,但这似乎不适合布尔字段。 我也尝试了接近的解决方案,但对我来说效果不好。与许多非自有品牌的文章相比,自有品牌方法的结果排名仍然要低得多 索引: schema: { articleId: { type: 'text' }, brandId: { type: 'text' },

我在不同的商店里有成吨的商品。其中一些文章是自有品牌的文章,在我的elasticsearch搜索结果中排名应该高于其他文章(但应显示自有品牌和非自有品牌。)

我已经尝试了不同的方法来处理字段\值\因子,但这似乎不适合布尔字段。 我也尝试了接近的解决方案,但对我来说效果不好。与许多非自有品牌的文章相比,自有品牌方法的结果排名仍然要低得多

索引:

schema: {
    articleId: { type: 'text' },
    brandId: { type: 'text' },
    brandName: { type: 'text' },
    countryId: { type: 'text' },
    description: { type: 'text' },
    isOwnBrand: { type: 'boolean' },
    stores: { type: 'keyword' },
  },
};
查询:

      query: {
          function_score: {
            query: {
              bool: {
                must: {
                  multi_match: {
                    query: searchterm,
                    fields: ['name^5', 'name.ngram'],
                    fuzziness: 'auto',
                    prefix_length: 2,
                  },
                },
                filter: [{ term: { stores: storeId } }],
              },
            },
          },
        },
      };
结果应优先考虑顶部为isOwnBrand=true的字段,同时在下面仍然显示isOwnBrand=false的相关文章

我对如何处理这个问题有点不知所措。

您可以使用。即使在布尔字段上,下面的代码也可以正常工作。试试看

{
    "query": {
        "function_score": {
           "query" {...}, #your normal query as in question
            #add below after query
            "field_value_factor": {
                "field": "isOwnBrand",
                "factor": 1.2,
                "modifier": "sqrt",
                "missing": 1
            }
        }
    }
}
我可以想到但还没有测试的一个警告-因为
false
0
,上面的脚本将使用false对所有文档进行评分,使评分变得混乱。您可以将isOwnBrand设置为数字字段,并从1开始设置优先级

或者你也可以使用