Elasticsearch-py 搜索在查询中使用字段选项时返回列表对象



elasticsearch-py 中使用Elasticsearch.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返回,而不是在搜索 1 中返回longstring(索引时使用的类型)。如何更正搜索 2 中的行为?

您需要使用

_source(源过滤)而不是 fields ,不建议使用后者。

     search_body =   { 
                "filter" :
                { 
                    "term" :
                    {
                        "user.id" : 19900726
                    }
                },
                '_source' :               <--- change this
                [
                    'id', 
                    'created_at', 
                    'retweet_count',
                    'favorite_count'
                ],
                "size" : 1
            }

相关内容

  • 没有找到相关文章

最新更新