У меня есть вопросы (например, «Быстрая коричневая лиса»), где я хочу по-разному оценивать определенные термины.Например, я хочу дать прилагательным * 2 повышение, * 3 повышение для существительных и * 1 для глаголов.
В настоящее время тело запроса, которое я отправляю в функцию Elasticsearch.search () изAPI Python выглядит следующим образом:
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"
/ "multimatch"
в предложении "should"
для каждой из по-разному усиленных частей запроса (какописал здесь ), но мне интересно, смогу ли я избежать этого громоздкого пути.Похоже, что в этом случае мне нужно будет изменить усиление в каждом поле на основе усиления, которое я хочу дать термину запроса, и я хочу избежать этой неинтуитивной и вводящей в заблуждение конструкции запроса.