给定一个使用 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 返回具有得分最高的专业术语的文档和仅匹配常见术语的淡化文档?
最佳答案
(为了其他人的利益回答我自己的问题)
事实证明,除非您有大量文档,否则 MLT 查询效果不佳。我将它与大约 100 万个文档放在一起,上面发布的代码非常适合这个:
search query: {
mlt: {
like_text: str,
min_term_freq: 3,
max_query_terms: 35,
boost_terms: 2,
minimum_should_match: '35%'
}
}
YMMV
关于ruby-on-rails - 用 Searchkick on Rails 做一个专业术语 "more like this query"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354148/