当前位置: 首页 > elasticsearch, 搜索 > 正文

elasticsearch MoreLikeThisQueryBuilder实例

1 星2 星3 星4 星5 星 (2 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

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

MoreLikeThisQueryBuilder more=new MoreLikeThisQueryBuilder("title","content");
more.likeText(q).analyzer("ik");//q为查询字段
 
         SearchResponse response= esClient.prepareSearch(index)
                .setTypes(type)
                .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);
                .execute()
                .actionGet();

在使用下面的语句查询后,未显示结果。原来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/elasticsearch-more-like-this-query-builder-demo.html | IT技术精华网

elasticsearch MoreLikeThisQueryBuilder实例:等您坐沙发呢!

发表评论