在couchdb python中查询复合键

时间:2012-09-24 21:16:32

标签: python couchdb

我有一个复合键["a", "b", "c", "d", "e"],我正在尝试使用python couchdb视图查询它。我通常一次关注其中一个键,不包括其他键。

例如,要查询key='a',我发现唯一可行的方法是:

results=db.view(docname, startkey=['a'], endkey=['azz']).

我认为{}适用于keystartkeyendkey,但它们似乎没有效果。

实际上,我通常会说:“查找所有包含"a""b",或"a""c""e"等的文档我已尝试为"a""b""c"等单独查看并执行单独的查询,但有些查询是基于不是的关键字 - &gt ; e,例如"x""y""z"。因此,对于那些人,我尝试使用看起来像["a", "b", "c", "d", "e", "z"]的键来制作视图。这是非常昂贵的,时间明智地将整个文档带到'include_docs'),我只需要输出abcd& {{ 1}}。

我正在尝试找到每个查询的复合键和最小文档传输的最佳组合。我认为如果我能够仅提取e,然后仅提取"a"等,它会起作用。

1 个答案:

答案 0 :(得分:0)

我希望我理解正确:您正在尝试获取包含两个或更多值的文档。例如,这可能是标签。

您有两种可能性:

  1. 使用像couchdb-lucene或elasticsearch
  2. 这样的全文搜索引擎
  3. 为每个键组合发出一个键。对于带有标签[“a”,“b”,“x”]的文档,您将发出:
  4. 查看结果:

    [{key: ["a"], id: 1, value: null}
    {key: ["a", "b"], id: 1, value: null}
    {key: ["a", "x"], id: 1, value: null}
    {key: ["a", "b", "x"], id: 1, value: null}
    {key: ["b"], id: 1, value: null}
    {key: ["b", "x"], id: 1, value: null}
    {key: ["x"], id: 1, value: null}]
    

    使用include_docs,您可以在查询时获得相应的文档。请记住,这种方法使用了大量的磁盘空间。您可以使用此视图创建单个设计文档,以查看视图结果需要多少磁盘空间。

    希望这有帮助!如果你提供了一个真实的例子,我可能会给出一个更好的答案; - )

    你的,伯恩哈德