2

私はエラスティックサーチが初めてです。選択したフィールドを、elasticsearch によって返されたネストされたオブジェクトから取得しようとしています。以下は、elasticsearch インデックスに格納されているオブジェクトです。

{
  "_index": "xxx",
  "_type": "user",
  "_id": "2",
  "_version": 1,
  "exists": true,
  "_source": {
    "user": {
      "user_auth": {
        "username": "nickcoolster@gmail.com",
        "first_name": "",
        "last_name": "",
        "is_active": false,
        "_state": {
          "adding": false,
          "db": "default"
        },
        "id": 2,
        "is_superuser": false,
        "is_staff": false,
        "last_login": "2012-07-10 21:11:53",
        "password": "sha1$a6caa$cba2f821678ccddc4d70c8bf0c8e0655ab5c279b",
        "email": "nickcoolster@gmail.com",
        "date_joined": "2012-07-10 21:11:53"
      },
      "user_account": {},
      "user_profile": {
        "username": null,
        "user_id": 2,
        "following_count": 0,
        "sqwag_count": 0,
        "pwd_reset_key": null,
        "_state": {
          "adding": false,
          "db": "default"
        },
        "personal_message": null,
        "followed_by_count": 0,
        "displayname": "nikhil11",
        "fullname": "nikhil11",
        "sqwag_image_url": null,
        "id": 27,
        "sqwag_cover_image_url": null
      }
    }
  }
}

今、私は特定のフィールドのみを user.user_auth から返したいと思っています(パスワード、スーパーユーザーなどは返されるべきではありません)。私はdjango PyESを使用していますが、以下は私が試したコードです:

fields = ["user.user_auth.username","user.user_auth.first_name","user.user_auth.last_name","user.user_auth.email"]
result = con.search(query=q,indices="xxx",doc_types="user",fields=fields)

しかし、私が得る結果は、取得されている電子メールのみです(つまり、最後のフィールドのみが返されます):

{
  "user.user_auth.email": "nikhiltyagi.eng@gmail.com"
}

ネストされたオブジェクト (つまり、user_auth、user_profile) の両方にこの抽象化が必要です

どうすればいいですか?

4

1 に答える 1

0

最新のdjango-haystackを使用するのはどうですか? また、ElasticSearch をバックエンドとしてカバーしているため、プロジェクトに適切にバインドされた ElasticSearch FTS を取得できます。

于 2012-07-10T21:38:00.420 に答える