4

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

这是一个简单的测试脚本来说明问题: 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 调用中使用字段确实有效。

其他人看到这个或有一些关于发生了什么的指示吗?

4

5 回答 5

2

改写

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

resultset = ES.search(Search(q, fields=['name']), indices='oolong'))
于 2014-07-22T20:50:31.490 回答
1

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

于 2012-12-01T22:39:31.933 回答
1

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

替换这一行:

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

对此:

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

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

于 2013-04-12T14:41:20.933 回答
0

看一下:

class pyes.query.Search(...)

在那里你可以设置一个字段数组。ES.search 上的字段不起作用。

es_connection = ES(server=[('http', 'localhost', '9200')])
q = Search(fields=['field1', 'field2'], .....)
resultset = es_connection.search(
    q,
    ....
)
于 2013-06-04T23:33:21.967 回答
0

用这个

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

或者如果您有多个领域的用途

resultset = ES.search(query=q, indices='oolong', fields="name,id")
于 2016-06-03T12:20:52.543 回答