1

Elasticsearch-pyElasticsearch.searchでメソッドを使用する

検索 1: 検索fieldsでオプションを使用しない場合:

search_body =   { 
                    "filter" :
                    { 
                        "term" :
                        {
                            "user.id" : 19900726
                        }
                    },
                    "size" : 1
                 }

結果は次のとおりです。

{u'_shards': {u'failed': 0, u'successful': 5, u'total': 5},
 u'hits': {u'hits': [{u'_id': u'657184533922451456',
    u'_index': u'tweets-index-2016-9',
    u'_score': 1.0,
    u'_source': {u'created_at': u'2015-10-22T13:19:37',
     u'entities': {u'hashtags': [{u'indices': [5, 13], u'text': u'IndvsSA'}],
      u'symbols': [],
      u'urls': [],
      u'user_mentions': []},
     u'favorite_count': 0,
     u'favorited': False,
     u'id': 657184533922451456,
     u'id_str': u'657184533922451456',
     u'is_quote_status': False,
     u'lang': u'und',
     u'outdated': u'No',
     u'retweet_count': 0,
     u'retweeted': False,
     u'saved_at': u'2016-03-03T15:02:06.157149',
     u'source': u'<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
     u'text': u'Out. #IndvsSA',
     u'truncated': False,
     u'user': {u'id': 19900726, u'id_str': u'19900726'}},
    u'_type': u'tweet'}],
  u'max_score': 1.0,
  u'total': 2981},
 u'timed_out': False,
 u'took': 10}

検索 2:fieldsオプションを指定して検索:

search_body =   { 
                    "filter" :
                    { 
                        "term" :
                        {
                            "user.id" : 19900726
                        }
                    },
                    "fields" : 
                    [
                        'id', 
                        'created_at', 
                        'retweet_count',
                        'favorite_count'
                    ],
                    "size" : 1
                }

結果は次のようになります。

{u'_shards': {u'failed': 0, u'successful': 5, u'total': 5},
 u'hits': {u'hits': [{u'_id': u'657184533922451456',
    u'_index': u'tweets-index-2016-9',
    u'_score': 1.0,
    u'_type': u'tweet',
    u'fields': {u'created_at': [u'2015-10-22T13:19:37'],
     u'favorite_count': [0],
     u'id': [657184533922451456],
     u'retweet_count': [0]}}],
  u'max_score': 1.0,
  u'total': 2981},
 u'timed_out': False,
 u'took': 6}

listここで 2 番目の検索では、検索 1 ですべてのフィールドが as として返されるのはなぜですかlong(string インデックス作成中に使用される型)が返されます。検索 2の動作を修正するにはどうすればよいですか?

4

1 に答える 1

0

の代わりに_source( source filtering )を使用する必要がありますfields。後者の使用は推奨されません。

     search_body =   { 
                "filter" :
                { 
                    "term" :
                    {
                        "user.id" : 19900726
                    }
                },
                '_source' :               <--- change this
                [
                    'id', 
                    'created_at', 
                    'retweet_count',
                    'favorite_count'
                ],
                "size" : 1
            }
于 2016-03-09T13:58:50.507 に答える