在pyes查询中使用'fields',在0.19.1上失败

时间:2012-11-23 13:47:40

标签: python elasticsearch pyes

尝试在pyes中使用fields = [...]参数.search失败

这是一个简单的测试脚本来说明问题: http://pastebin.com/LiRMC3ib

使用当前版本的pyes 0.19.1,此脚本输出{}作为

的结果
print resultset[0]

然而,使用之前的'旧'不稳定的0.19.1版本的pyes,我有 - 0.19.1(不稳定)的结果

print resultset[0]

是预期的:

{u'name': u'Joe Tester'}

使用ES.get调用中的字段工作。

其他人看到了这个或者有什么指示可以了吗?

5 个答案:

答案 0 :(得分:2)

重写

resultset = ES.search(query=q, indices='oolong', fields=["name"])

resultset = ES.search(Search(q, fields=['name']), indices='oolong'))

答案 1 :(得分:1)

我在您的pastebin代码中注意到的一件事可以解释意外行为 - 刷新(第37行)应该在搜索之前(第36行)。否则,如果文档已提交到索引,则存在竞争条件。

答案 2 :(得分:1)

我使用pyes 0.19.1遇到了同样的问题,但我能够从结果集中检索单个字段。

替换此行:

resultset = ES.search(query=q, indices='oolong', fields=["name"])

到这一个:

resultset = ES.search(query=q, indices='oolong', fields="name")

这对我有用。我还没想出如何检索多个字段。当我将列表传递给 fields 时,它总是返回空字典。

答案 3 :(得分:0)

看看:

class pyes.query.Search(...)

在那里你可以设置一个字段数组。 ES.search上的字段无效。

es_connection = ES(server=[('http', 'localhost', '9200')])
q = Search(fields=['field1', 'field2'], .....)
resultset = es_connection.search(
    q,
    ....
)

答案 4 :(得分:0)

使用此

resultset = ES.search(query=q, indices='oolong', fields="name")

或者如果您有多个字段使用

resultset = ES.search(query=q, indices='oolong', fields="name,id")