做一个专门的术语"更像是这个查询"使用Searchkick on Rails?

时间:2015-05-20 15:31:39

标签: ruby-on-rails elasticsearch searchkick

给定一个Widget模型,该模型使用searchkick索引到elasticsearch:

searchkick word: [:title], highlight: [:title], term_vector: true

我已将这些文件编入索引:

{ title: "work with puppies" }
{ title: "work with sharks" }
{ title: "work with kittens" }
{ title: "shoot lasers at the moon" }

我试图做一个"更像这样" (MLT)查询新的文本:

"work with lasers"

我的目标是让它击中最后得分最高的文档因为' lasers'比使用'更专业,这在我的文档语料库中很常见。

我试过这个:

Widget.search query: { 
  mlt: {
    like_text: "work with lasers",
    min_term_freq: 1,
    boost_terms: 5,
    analyzer: 'searchkick_search2'
  } }

但是它让我回过头来......"顶部的文件得分最高。

我也试过输入一个键/ val {停用词:[' work',' with']}但是我得到0结果。

有没有办法让searchkick / elasticsearch给我一些文件,这些文件包含最高分的专业术语和只与常见术语相匹配的淡化文档?

1 个答案:

答案 0 :(得分:5)

(回答我自己的问题以获得其他人的利益)

除非您有大量文档,否则MLT查询无法正常工作。我把它与大约100万个文档放在一起,上面发布的代码非常适合这个:

search query: {
  mlt: {
    like_text: str,
    min_term_freq: 3,
    max_query_terms: 35,
    boost_terms: 2,
    minimum_should_match: '35%'
  }
}

YMMV