当前位置: 首页 > 面试题库 >

Spring SearchQuery ElasticSearch的每次点击得分

酆翔宇
2023-03-14
问题内容

在通过SearchQuery进行搜索时,我试图查看和使用每个匹配项的_score。除了别的以外,这还可以知道我的搜索在哪个分数范围内。但是除了使用searchQuery.withMinScore(float)设置MinScore之外;我找不到任何方法来处理搜索分数。

@Override
public Page<Website> listsearch(SearchBody searchBody, int size, int page) {
    BoolQueryBuilder qb = QueryBuilders.boolQuery();

    for(SearchUnit unit:searchBody.getSearchBody()){
        if(unit.isPriority()) {
            qb.must(matchQuery("_all", unit.getWord()).operator(MatchQueryBuilder.Operator.AND)
                    .fuzziness(Fuzziness.AUTO));

        }else {
            qb.should(termQuery("_all", unit.getWord())
                    .boost(unit.getWeight()));
        }
    }

    for(SearchUnit ExUnit:searchBody.getExcludeBody()){
        qb.mustNot(matchPhraseQuery("_all",ExUnit.getWord()));
    }

    SearchQuery searchQuery = new NativeSearchQueryBuilder()
            .withIndices("websites_v1")
            .withTypes("website")
            .withQuery(qb)
            .withMinScore(0.05F)//Magical minscore
            .withPageable(new PageRequest(page, size))
            .build();


    Page<Website> search = searchRepository.search(searchQuery);
    return search;

}

使用的搜索功能来自org.springframework.data.elasticsearch.repository; 定义为

Page<T> search(SearchQuery var1);

所以我的问题是无论如何我都可以访问页面中每个返回对象的分数?还是我需要将查询方法切换到其他方法才能实现?


问题答案:

使用Spring Data ElasticSearch存储库是不可能的。

您需要自动连接an EntityMapper和an ElasticSearchTemplate并自己提取分数。这样的事情应该起作用:

Pageable pageRequest = new PageRequest(0, 10);
Page<Website> result = elasticSearchTemplate.query(searchQuery, new ResultsExtractor<Page<Website>>() {
    @Override
    public Page<Website> extract(SearchResponse response) {
        List<Website> content = new ArrayList<>();
        SearchHit[] hits = response.getHits().getHits();
        for (SearchHit hit : hits) {
            Website website = entityMapper.mapToObject(hit, Website.class);
            content.add(website);
            float documentScore = hit.getScore(); // <---- score of a hit
        }
        return new PageImpl<Website>(content, pageRequest, response.getHits().getTotalHits());
    }
});


 类似资料:
  • 在这个图像中有8个按钮。现在我在这个应用程序上使用测试广告单元。这个活动我有8个按钮,每个按钮都与有针对性的活动相联系。我的问题是,当我单击这8个按钮中的任何按钮时,它会显示admob插播广告并发送到目标活动,但当我关闭目标活动并再次返回main_activity并单击这8个按钮中的任何按钮时,admo插播广告不会显示,但在按钮上单击它会打开目标活动。我想在每次点击按钮时显示广告插播广告。这是怎么

  • 本文向大家介绍jquery实现点击页面计算点击次数,包括了jquery实现点击页面计算点击次数的使用技巧和注意事项,需要的朋友参考一下 代码很简单,这里就不多废话了,直接奉上: 代码就到这里了,希望小伙伴们喜欢。

  • 问题内容: 当用户单击登录或注册按钮时,我试图阻止多个请求。这是我的代码,但是不起作用。只是第一次工作正常,然后返回false。 有任何想法吗?谢谢! 问题答案: 问题在这里: 不再指向按钮。

  • 并且Ive在我的AndroidManifest.xml中定义了新的活动,但是我不知道如何解决这个问题······ 我尝试了很多答案在Stackoverflow和其他网站上找到,但我不能解决这个问题...

  • 我正在尝试绘制每分钟调用 API 的次数。使用Coda Hale指标和石墨,我可以看到一个连续的计数(即如果API被调用5次,它将在时间上显示一条恒定的线,以获得值5),或者我可以看到每分钟的指数加权移动平均线。但我想看到的只是每分钟调用 API 的次数。我尝试过使用Coda Hale的计数器,计时器和仪表,也尝试过使用石墨渲染函数,但无法获得我想要的东西。 以前有人这样做过吗?如果这是一个基本问

  • 我有一个JButton,可以让我的JTextArea可见: 在第一次单击、第三次单击、第五次单击时,。。。在JButton上,JTextArea应该出现: 在第二次单击、第四次单击、第六次单击时,。。。在JButton上,JtextArea应该消失: 帮助被大大评价!