ruby-on-rails - 用 Searchkick on Rails 做一个专业术语 "more like this query"?

标签 ruby-on-rails elasticsearch searchkick

给定一个使用 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/

相关文章:

ruby-on-rails - 从 Ruby/Rails 中的路径字符串中删除最后一个路径目录

ruby-on-rails - 通过对象的属性对 Rails Active Record 对象的数组进行排序

elasticsearch - ElasticsearchTemplate-为什么对某些操作隐式使用indexName而对其他操作则隐式使用

elasticsearch - 如何在Elasticsearch DSL查询中使用Kibana可视化查询?

ruby-on-rails - 在 Rails 4.1 中使用 Searchkick gem 在 Elasticsearch 中设置 Facets

ruby-on-rails - Rails 多态嵌套路由生成失败

ruby-on-rails - Rails App : Is the README. md 文件并引用该文件内的图像可公开访问吗?

performance - 搜索响应时间不稳定地翻了一番

ruby-on-rails - Twitter Typeahead没有在Rails 4中显示建议

elasticsearch - Elasticsearch警告消息