elasticsearch moreLikeThis查询应用




elasticsearch MoreLikeThisQueryBuilder实例


分布式搜索elasticsearch java client:使用More like this实现基于内容的推荐
elasticsearch MoreLikeThisQueryBuilder查询主要实现对一句话相似文章的查询。
在推荐系统中,通常要用到与一篇文章相似度高的一组文章。在这里我们要用到
MoreLikeThisRequestBuilder moreLikeThis=new MoreLikeThisRequestBuilder(client,"cms","news","id");
       moreLikeThis.setField("title","content")
        .setSearchFrom(0)
        .setSearchSize(5)
        .execute()
        .actionGet();
或:
 SearchResponse searchResponse = client.prepareMoreLikeThis("cms", "news", "id")
 
                        .setField("title","content")
 
                        .setSearchFrom(searchParam.getFrom())
                        .setSearchSize(searchParam.getSize())
                        .execute()
                        .actionGet();
获取文章:
Float usetime = searchResponse.getTookInMillis()/1000f;
        // 命中记录数
        Long hits = searchResponse.getHits().totalHits();
        for (SearchHit hit : searchResponse.getHits()) {
 
            // 打分
            Float score = hit.getScore();
            // 文章id
            Integer id = Integer.parseInt(hit.getSource().get("id").toString());
 
            String title = hit.getSource().get("title").toString();
 
            String content =   hit.getSource().get("content").toString();
            // 文章更新时间
            Long updatetime = Long.parseLong(hit.getSource().get("updatetime").toString());
  }

我们可以用elasticsearch MoreLikeThis做推荐功能。实例如下:


MoreLikeThisQueryBuilder more=new MoreLikeThisQueryBuilder("title","content","mobileTitle");

       more.likeText(q).analyzer("ik");//q为查询字段
// more.likeText("长安福特").analyzer("ik").minTermFreq(2).maxQueryTerms(25);//q为查询字段
 
SearchRequestBuilder response= client.prepareSearch("memedianews")
                .setTypes("memedianews")
                .setQuery(more)
                .setScroll(new TimeValue(60000))
//                .addFields("id","fname")
//                .addSort("_score", SortOrder.DESC)
//                .addSort("updatetime", SortOrder.DESC)
//                .addHighlightedField("fname")
//                .setHighlighterEncoder("UTF-8")
//                .setHighlighterPreTags("<em>")
//                .setHighlighterPostTags("</em>")
                .setFrom(0)
                .setSize(10);
SearchResponse searchResponse = response.execute().actionGet();
this.printresult(searchResponse);


在使用下面的语句查询后,未显示结果。原来MoreLikeThisQueryBuilder 默认的minTermFreq最小为2,即一个term最少应该出现2次

/**
     * The frequency below which terms will be ignored in the source doc. The default
     * frequency is <tt>2</tt>.
     */
public MoreLikeThisQueryBuilder minTermFreq(int minTermFreq) {
        this.minTermFreq = minTermFreq;
        return this;
    }


最大的maxQueryTerms默认为25,根据自己需求修改。

/**
     * Sets the maximum number of query terms that will be included in any generated query.
     * Defaults to <tt>25</tt>.
     */
    public MoreLikeThisQueryBuilder maxQueryTerms(int maxQueryTerms) {
        this.maxQueryTerms = maxQueryTerms;
        return this;
    }

将上述代码中修改为:

more.likeText(q).analyzer("ik").minTermFreq(1).maxQueryTerms(25);


转载 : http://www.chepoo.com/tag/code-example

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值