如何在Elasticsearch中使用more Like this query score函数score

elcex8rz  于 7个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(77)

如何在Elasticsearch中使用“more Like this”查询得分来函数得分

static FunctionScore mltFunctionScore(String text, Double weight, List<String> fields) {
        return new FunctionScore.Builder()
                .filter(new Query.Builder()
                        .moreLikeThis(new MoreLikeThisQuery.Builder()
                            .fields(fields)
                            .like(new Like.Builder().text(text).build())
                            .build())
                        .build())
                .weight(weight)
                .build();
    }

字符串
使用函数score将只使用“more like this”查询作为过滤器。
我可以得到与匹配查询相同的分数并将其用作函数分数吗?

vaj7vani

vaj7vani1#

如果你想在你的函数得分中使用MLT查询的得分,你不应该把它用作过滤器。
如果我正确理解了你的问题,这个查询应该可以解决你的问题:

{
  "query": {
    "function_score": {
      "query": {
        "more_like_this": {
          "fields": ["your_field_name"],
          "like": "Your text here",
          "min_term_freq": 1
        }
      },
      "functions": [
        {
          "weight": 2
        }
      ],
      "boost_mode": "multiply"
    }
  }
}

字符串
在Java中,它应该是:

FunctionScore functionScore = new FunctionScore.Builder()
    .query(new Query.Builder()
        .moreLikeThis(new MoreLikeThisQuery.Builder()
            .fields(fields)
            .like(new Like.Builder().text(text).build())
            .build())
        .build())
    .addFunction(new WeightFunction.Builder().weight(weight).build())
    .boostMode(CombineFunction.MULTIPLY)
    .build();


如果你遇到了一个错误,你需要修改代码,因为我没有机会测试代码。

相关问题