У меня есть набор ключевых слов (навыки в моем примере), и я хотел бы получить документы, которые соответствуют большинству из них. Документы должны быть отсортированы по количеству ключевых слов, которым они соответствуют. Поле, в которое я ищу (skills
), имеет тип nested
. Индекс имеет следующее отображение:
{
"mappings": {
"profiles": {
"properties": {
"id": {
"type": "keyword"
},
"skills": {
"type": "nested",
"properties": {
"level": {
"type": "float"
},
"name": {
"type": "keyword"
}
}
}
}
}
}
}
Я пробовал оба запроса условий в поле ключевого слова, например:
{
"query": {
"nested": {
"path": "skills",
"query": {
"terms": {
"skills.name": [
"python",
"java"
]
}
}
}
}
}
И логический запрос
{
"query": {
"nested": {
"path": "skills",
"query": {
"bool": {
"should": [
{
"terms": {
"skills.name": [
"java"
]
}
},
{
"terms": {
"skills.name": [
"r"
]
}
}
]
}
}
}
}
}
Для обоих запросов максимальный балл возвращаемых документов равен 1. Таким образом, оба возвращаемых документа имеют ЛЮБОЕ из навыков, но не сортируют их, так что те, у кого оба навыка, находятся на первом месте. Проблемы, похоже, заключаются в том, что skills
- это поле nested
.