Отображение индекса выглядит следующим образом:
"field1": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"field2": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
...
Теперь я хочу запросить индекс, чтобы получить обязательные поля (field1, field2), которые содержат слово, например, «яблоко».Ниже приведен DSL (добавьте вес в поле 1):
{
"aggs": {
"field1": {
"terms": {
"field": "field1.keyword"
},
"aggs": {
"field2": {
"terms": {
"field": "field2.keyword",
"missing": ""
}
}
}
}
},
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"multi_match": {
"query": "apple*",
"fields": [
"field1^2",
"field2"
]
}
},
{
"query_string": {
"query": "*apple*",
"fields": [
"field1^2",
"field2"
]
}
},
{
"prefix": {
"field1": {
"value": "apple"
}
}
}
]
}
},
"size": 0
}
Я предпочитаю ранжирование результатов:
точное совпадение
начинаться с «яблока»
содержать «яблоко»
Например:
apple
apple pie
an apple
Но вышеупомянутый DSL не может этого достичь.Я не могу добавить вес к булевому запросу "prefix".И элементы, которые начинаются с «яблока», стоят позади тех, которые просто содержат «яблоко».Как я могу это сделать?Спасибо.