Оценка ключевых слов запроса по вложенным полям в elastichsearch 6.3 - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть набор ключевых слов (навыки в моем примере), и я хотел бы получить документы, которые соответствуют большинству из них. Документы должны быть отсортированы по количеству ключевых слов, которым они соответствуют. Поле, в которое я ищу (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.

1 Ответ

0 голосов
/ 06 сентября 2018

Второй запрос работает, если каждый элемент should является вложенным запросом.

{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "skills",
            "query": {
              "terms": {
                "skills.name": [
                  "java"
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "skills",
            "query": {
              "terms": {
                "skills.name": [
                  "r"
                ]
              }
            }
          }
        }
      ]
    }
  }
}
...