我希望查询返回一个计算如下的分数:
标题中每个查询词的出现次数+描述/查询词的数量
例如
EbSearch.add [
new_job( id: 1, title: "Java Programmierer",
description: "Java Programmierer")
]
res = EbSearch.search("Java Programmierer").results.first.score.should == 4
目前它输出 8,因为它对每个术语进行查询并将其汇总。我可以在之后进行除法,但我没有分析过的查询词,所以复合词可能会弄乱分数。
查询的结构如下:
search = Tire.search index_name do
query do
dis_max do
query { string query, fields: ['title^3', 'description.with_synonyms^0.5'], use_dis_max: false, default_operator: "OR" }
query { string query, fields: ['title^3', 'description.without_synonyms'], use_dis_max: false, default_operator: "OR"}
end
end
end
非常感谢我如何解决这个问题的任何想法。
编辑
我意识到我没有提供足够的上下文。
这是我已经制定的其他一些片段。我编写了一个自定义 SimilarityProvider 来禁用 idf 和规范化。https://gist.github.com/outsmartin/6114175
完整的轮胎代码在这里https://gist.github.com/6114186。它比示例稍微复杂一些,但应该可以理解。