Python Pythonasticsearch: как искать по значению внутри массива - PullRequest
0 голосов
/ 14 июня 2019

У меня есть следующая структура в моем индексе:

[
    {
         name:"project1",
         users: [
                   {"id":"1"},
                   {"id":"2"}
         ]
    },
    #... more projects
]

Я хотел бы знать, как я могу получить все проекты определенного пользователя (по его идентификатору), вот что я попробовал:

q = Q("term", id="1") 
resp = projects_index.query("nested",path="users",query=q).execute()

но я не вижу результата, что мне не хватает?
Спасибо
Редактировать: вот мое отображение индекса:

   {
      "projects": {
        "mappings": {
          "doc": {
            "properties": {
              "created_at": {
                "type": "date"
              },
              "name": {
                "type": "text"
              },
              "users": {
                "type": "nested",
                "properties": {
                  "id": {
                    "type": "text"
                  }
                }
              }
            }
          }
        }
      }
    }

1 Ответ

1 голос
/ 14 июня 2019

Причина, по которой вы не получаете результаты, заключается в том, что при указании вложенного пути вы должны указать полное имя, включая имя родительского поля, т. Е. Вы должны использовать users.id вместо просто id. Таким образом, запрос будет выглядеть следующим образом:

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "users",
            "query": {
              "term": {
                "users.id": "1"
              }
            }
          }
        }
      ]
    }
  }
}

Предложение: Измените тип поля id на keyword, чтобы значение id не получало токенизм в несколько терминов.

...