【发布时间】:2021-05-30 20:58:00
【问题描述】:
我在记录架构中有一个字段 distribution,如下所示:
...
"distribution": {
"properties": {
"availability": {
"type": "keyword"
}
}
}
...
我想将distribution.availability == "ondemand" 的记录排名低于其他记录。
我查看了 Elasticsearch docs,但无法找到一种方法来降低此类记录在 index-time 内的分数以使其在搜索结果中显示得更低。
我怎样才能做到这一点,任何指向相关来源的指针也足够了。
更多信息:
我在 query-time 的 python 客户端的帮助下完全省略了这些 ondemand 记录,如下所示:
from elasticsearch_dsl.query import Q
_query = Q("query_string", query=query_string) & ~Q('match', **{'availability.keyword': 'ondemand'})
现在,我想包含这些记录,但我想将它们放置在低于其他记录的位置。
如果在 index-time 中无法实现类似的功能,请建议我如何使用 python 客户端在 query-time 中实现此功能。
应用 llermaly 的建议后,python 客户端查询如下所示:
boosting_query = Q(
"boosting",
positive=Q("match_all"),
negative=Q(
"bool", filter=[Q({"term": {"distribution.availability.keyword": "ondemand"}})]
),
negative_boost=0.5,
)
if query_string:
_query = Q("query_string", query=query_string) & boosting_query
else:
_query = Q() & boosting_query
【问题讨论】:
标签: python elasticsearch mapping ranking