elastic搜索的时候,对于过长的string字段不希望全部返回,而是只返回部分应该怎么做?

elastic搜索的时候,对于过长的string字段不希望全部返回,而是只返回部分应该怎么做?

哑剧 发布于 2021-11-30 字数 1508 浏览 767 回复 1

@纳兰琴 你好,想跟你请教个问题:

搜索的时候采用的是multi_match的best_fields方式,发现排第50左右的文档,已经不是title和body都能包含用来检索的关键字了,下面的做法,highlight对于不包含关键字的字段不予返回。但是仍然希望body能够返回部分内容,可以是body的头100个字符。应该怎么做?

下面是搜索部分的代码。

MultiMatchQueryBuilder mmqb = QueryBuilders.multiMatchQuery("sift 集群", 
                    "title^3",
                    "body",
                    "tag^2",
                    "category^2")
                    .type("best_fields")
                    .tieBreaker((float) 0.3)
                    .minimumShouldMatch("75%");
  
            SearchResponse sr;
            SearchRequestBuilder srb;
            srb = client.prepareSearch("blog_v1")
                    .setTypes("blogpost")
                    .setFrom(100)
                    .setSize(10)
                    .setQuery(mmqb)
                    .addFields("tag","category","url","title")
                    .setHighlighterNoMatchSize(80)
                    .setHighlighterPreTags("<em>")
                    .setHighlighterPostTags("</em>")
                    .addHighlightedField("title", 32)
                    .addHighlightedField("body", 80);
            sr = srb.get();

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无声静候 2021-12-01 1 楼

判断HighlightField是否为空,如果不为空,从高亮片段中取出高亮的数据,否则从_source取数据