Elasticsearch 封装好了More Like This 搜索功能, 用来基于给定的某个或某组文档, 返回与之相似的文档. 语法如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
    "more_like_this" : {
        "fields" : ["title", "description"],
        "docs" : [
        {
            "_index" : "imdb",
            "_type" : "movies",
            "_id" : "1"
        },
        {
            "_index" : "imdb",
            "_type" : "movies",
            "_id" : "2"
        }],
        "min_term_freq" : 1,
        "max_query_terms" : 12
    }
}

结合 Rails 例子:

1
2
3
@post = Post.last
query = {:query=>{:more_like_this=>{docs:[{_index: 'posts',_type: 'post', _id: @post.id}], :min_term_freq=>1, :min_doc_freq=>1}}}
records = Post.search(query).records

这个查询的参数有三个,分别是 Document Input Parameters, Term Selection Parametersedit, Query Formation Parameters

Document Input Parameters 是必须有的查询参数, 可以是 docs, ids 或者 like_text之一.

Term Selection Parametersedit 可以是 max_query_terms, min_term_freq, min_doc_freq, max_doc_freq, min_word_length, max_word_length, stop_words, analyzer

Query Formation Parameters 可以是 minimum_should_match, boost_terms, include, boost

相关释义文档写的还是挺清楚的.


Elasticsearch 开箱笔记

Elasticsearch on Rails

Elasticsearch Aggregations 聚合分析

Upgrade Elasticsearch to 2.3

Elasticsearch Scroll (Ruby)

Elasticsearch analysis & 自定义 analyzers

Elasticsearch 如何不用停机情况下完成 mapping 的修改