如何查询Algolia以查找缺少特定密钥的所有文档?

时间:2016-11-15 03:52:55

标签: python algolia

如果我的Algolia索引包含如下所示的文档:

{“object_id”:1,“color”:“red”,“shape”:“circle”}
{{object_id“:2,”color“:”blue“,”shape“:”triangle“}
{“object_id”:3,“color”:“green”,“shape”:“square”}
{“object_id”:4,“color”:null,“shape”:“hexagon “}
{{object_id”:5,“形状”:“六角形”} ...

使用Algolia的python API,我如何搜索索引以获取像4和5这样的对象,因为它们都缺少“颜色”属性。

我一直拖着({{3但是我找不到答案。

我试过这个片段但没有运气:
来自algoliasearch import algoliasearch

client = algoliasearch.Client(“YourApplicationID”,'YourAPIKey')
index = client.init_index(“colorful_shapes”)
res = index.search(“null”)
res1 = index.search(“color = null”)
res2 = index.search(“color:null”)
res3 = index.search(“!color”)
print(res,res1,res2,res3)

2 个答案:

答案 0 :(得分:3)

不幸的是,在Algolia中搜索所有缺少密钥的对象是不可能的(对于无架构的NoSQL引擎来说,btw非常复杂)。

一个简单的解决方法是在索引时推送一个标签,指定是否设置了属性:

{
  "objectID": 1,
  "myattr": "I'm set",
  "_tags": ["myattr_set"]
}

{
  "objectID": 2,
  "_tags": ["myattr_unset"]
}

在查询时,您可以使用tag

过滤搜索
index.search('your query', { filters: 'myattr_unset', ... })

答案 1 :(得分:0)

我确定有更优雅的解决方案,但这似乎适用于您提供的内容(我还假设您的null是预期的None):

a = [{"object_id":1, "color":"red", "shape":"circle"}, {"object_id":2, "color":"blue", "shape":"triangle"}, {"object_id":3, "color":"green", "shape":"square"}, {"object_id":4, "color":None, "shape":"hexagon"}, {"object_id":5, "shape":"hexagon"}]
list(a) #since dict has no set order
for i in a:
    try:
        if (i['color'] is None):
            print(a.index(i)) #prints 3
    except KeyError:
        print(a.index(i)) #prints 4

我知道您希望打印45,但索引从0开始计数,只需在每个print语句中添加1即可轻松更改。