我希望ElasticSearch返回独立于大小写的结果分数。例如,假设我查询字符串" HOUSE"或(" house")我得到以下结果:
"House" => score: 0.6868894,
"House on the hill" => score: 0.52345484
"HOUSE" => score: 0.52200186
在一个理想的世界里,无论是" House"和" HOUSE"得分为1.0和" House on the hill"得分为0.5。
到目前为止,我已尝试添加custom analyser,现在正在查看omit_norms选项。我也在考虑模式,因为它们有一个CASE_INSENSITIVE标志。不幸的是,我发现官方文档缺少示例和代码片段......
任何人都可以提供代码片段/查询示例,包括实现与案例无关的分数所需的参数吗?对使用Tire for Rails提供解决方案的任何人的额外认可。
MAPPING
mapping _source: {} do
indexes :id, type: 'integer'
indexes :value, :analyzer => 'string_lowercase'
end
**分析仪是上面提到的自定义分析器
QUERY
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "house"
}
}
}
},
"fields": ["value"],
"from": 0,
"size": 50,
"sort": {
"_score": {
"order": "desc"
}
},
"explain": true
}
ElasticSearch 0.90.5; Rails 4.0.0; 轮胎(宝石)0.6.0
答案 0 :(得分:0)
更好的是,问题是由ES使用许多(默认情况下为5个)分片对文档进行评分而每个分片仅使用分配给它的文档来计算其分数。由于我正在使用测试数据而我的数据库几乎是空的,因此得分完全没有。答案是使用dfs_query_then_fetch搜索类型(至少在开发时...)。仍在搜索如何在Rails / Tire中实现或在ES中设置为默认值。
干杯, NIC