2

给定一个使用 searchkick 索引到 elasticsearch 中的 Widget 模型:

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”比“work with”更专业,这在我的文档语料库中很常见。

我试过这个:

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

但它让我回到了得分最高的“与...一起工作”文档。

我也试过输入一个 key/val { stopwords: ['work', 'with'] } 但我得到 0 个结果。

有没有办法让 searchkick/elasticsearch 给我返回具有最高分数的专业术语的文档,并淡化只匹配常见术语的文档?

4

1 回答 1

6

(为他人的利益回答我自己的问题)

事实证明,除非您有大量文档,否则 MLT 查询效果不佳。我将它与大约 100 万个文档放在一起,上面发布的代码与此配合得非常好:

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

YMMV

于 2015-09-11T19:27:41.113 回答