给定一个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给我一些文件,这些文件包含最高分的专业术语和只与常见术语相匹配的淡化文档?
答案 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