1 回答
TA贡献2036条经验 获得超8个赞
查询是不言自明的。我添加了“haloha_id”来过滤块(不对文档评分),“text”添加到 must 块(给文档评分),“mood”添加到 should block(提升文档)
{
"query": {
"bool": {
"filter": [
{
"match": {
"haloha_id": "5ecf6bff25a36366cd134db2"
}
}
],
"must": [
{
"match": {
"text": {
"query": "chilli ",
"fuzziness": "auto"
}
}
}
],
"should": [
{
"term": {
"mood": {
"value": 2
}
}
}
]
}
}
}
mood:3 中的问题比 mood:2(should 子句中的搜索词)排名更高是由于分片
来自文档
如果您注意到两个内容相同的文档得到不同的分数,或者完全匹配的文档没有排在第一位,那么问题可能与分片有关。默认情况下,Elasticsearch 让每个分片负责生成自己的分数。然而,由于索引统计信息是得分的重要贡献者,因此这仅在分片具有相似索引统计信息时才有效。假设是因为默认情况下文档被均匀地路由到分片,那么索引统计数据应该非常相似并且评分会按预期工作。但是,如果您:
在索引时使用路由,查询多个索引,或者索引中的数据太少,那么搜索请求中涉及的所有分片很可能没有相似的索引统计信息,并且相关性可能很差。
如果您有一个小数据集,解决此问题的最简单方法是将所有内容索引到具有单个分片 (index.number_of_shards: 1) 的索引中,这是默认设置。那么所有文档的索引统计信息都是相同的,并且分数将是一致的。
- 1 回答
- 0 关注
- 363 浏览
添加回答
举报