我有一些查询(例如“ quick brown fox”),在这里我想对某些术语进行不同的加权。例如,我想给形容词加* 2助推,为名词加* 3助推,给动词加* 1。
目前,我从python API提交给Elasticsearch.search()函数的查询主体如下:
body = {
"query": {
"function_score": {
"query": {
"bool": {
"must": {
"bool": {
"should": [
{
"multi_match": {
"query": "quick brown fox",
"type": "most_fields",
"fields": ["title^4", "abstract^2", "content"]
}
},
{
"multi_match": {
"query": "fairy tale",
"type": "most_fields",
"fields": ["type^6", "genre^3"]
}
}
]
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"datetime": {
"gte": "2018-01-01T00:00:00",
"lte": "2018-12-31T23:59:59",
}
}
}
],
"must_not": [
{
"ids": {"type": "books", "values": ["1","2"]}
},
]
}
}
}
},
"gauss": {
"datetime": {
"scale": "30d",
"decay": 0.5
}
}
}
}
}
我发布整个查询只是为了清楚我使用的类型和所需的功能。
我的问题是:我可以做类似"query": "quick^2 brown^2 fox^3"
的事情吗?什么是更干净更好的方法?
我已经看到可以在"match"
子句中为每个不同的提升查询部分(如here所述)单独设置"multimatch"
/ "should"
子句,但我想知道我是否可以避免这条繁琐的路。似乎在这种情况下,我需要根据要赋予查询字词的提升来修改每个字段的提升,并且我想避免这种不直观且具有欺骗性的查询构造。