为了根据字段值控制文档的分数,我在dsl查询中使用filter with function\u score,这将获得预期的结果。
然而,在巢穴中实现这一点,结果却不尽相同;分数不应用于筛选器值。通过进一步调查,我发现scorefunctionsdescriptor不支持某些版本的c#nest filter。还是这样吗?你能帮我用一个工作选项来实现这个嵌套吗(我是ElasticSearch和c的新手,所以请原谅,如果这是一个noob问题)。
我目前正在使用ElasticSearchV7.6和nest v7.5.1。
谢谢!
dsl查询
GET /help/_search
{
"query":{
"function_score": {
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "AGC",
"fields": [
"title^2",
"description^1"
],
"type":"most_fields",
"fuzziness": "AUTO:4,8",
"prefix_length": 2,
"boost": 5
}
}
]
}
},
**"functions": [
{
"filter": {
"term":{
"product":"A"
}
},
"weight": 45
},
{
"filter": {
"term":{
"product":"B"
}
},
"weight": 20
},
{
"filter": {
"term":{
"product":"C"
}
},
"weight": 10
}
],**
"score_mode": "max",
"boost_mode": "multiply"
}
}
}```
1条答案
按热度按时间jaql4c8m1#
通过进一步调查,我发现scorefunctionsdescriptor不支持某些版本的c#nest filter。还是这样吗?
你要找的函数是一个应用了过滤器的权重函数。这在客户端已经支持了很长一段时间。
客户机等价物应该是
有几件事你可能想看看:
description^1
可以用简单的description
因为默认的boost是1这可以更好地用
bool
查询方式should
用于每个weight函数中每个查询的子句,并应用类似于weight使用方式的增强。像这样的