elasticsearch - 如何根据elasticsearch中的查询词数计算分数?

标签 elasticsearch tire

我希望查询返回一个计算如下的分数:

标题中每个查询词的出现+描述/查询词的数量

例如

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 .它比示例稍微复杂一点,但应该可以理解。

最佳答案

您可以使用 analyze 轻松获取针对您的查询的已分析术语列表命令。但是,我必须指出,Elasticsearch 评分比在小索引上运行测试时看起来要复杂得多。您可以在 Lucene documentation 中找到 Elasticsearch 使用的公式你可以使用 explain命令以查看此公式如何应用于您的结果。我还建议使用单个分片或使用 dfs_query_then_fetch 在索引上测试和调整您的评分算法。搜索类型,它在小索引上产生更精确的结果。

关于elasticsearch - 如何根据elasticsearch中的查询词数计算分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17815713/

相关文章:

elasticsearch - 嵌套聚合,条款->条款->计数Elasticsearch

ruby-on-rails - Elasticsearch on Query 的 Facet 问题

ruby-on-rails - 无法在Elasticsearch中根据 “missing”字段过滤出结果

ruby-on-rails - 每天唯一Mac地址的Elasticsearch日期直方图

elasticsearch - 使用ttl使用Tyre Gem使文档过期

ruby-on-rails - Config Tire与Bonsai ElasticSearch Heroku附加组件一起使用

regex - 无法识别的字符转义 '-' | Elasticsearch

node.js - 如何在响应中获取更新的文档

java - 如何使用java连接到elasticsearch?

ruby - ElasticSearch/Ruby - 返回日期直方图格式?