2016-11-15 36 views
0

如果我有包含像这些文件的Algolia指数:

{ “的object_id”:1, “色彩”: “红”, “形状”: “圆圈”}
{ “的object_id”:2“,颜色“:”蓝色“,”形状“:”三角形“}
{”object_id“:3,”color“:”green“,”shape“:”square“}
{”object_id“ :空, “形”: “六边形”} {
“OBJECT_ID”:5, “形”: “六边形”}
...

使用的Algolia Python API中,我怎么能搜索索引获得因为它们都缺少“颜色”属性,所以返回4和5的对象。

我一直在拖着(https://www.algolia.com/doc/api-client/python/search#search-in-an-index),但我找不到答案。

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

我试过这个片段,但没有运气:
从algoliasearch进口algoliasearch

客户端= algoliasearch.Client( “YourApplicationID”, 'YourAPIKey')
指数= client.init_index(“colorful_shapes “)
解析度= index.search(” 空 “)
RES1 = index.search(” 颜色= NULL “)
RES2 = index.search(” 颜色:空“)
RES3 = index.search( “!color”)
打印(RES,RES1,RES2,RES3)

回答

3

不幸的是,在Algolia中搜索所有缺少关键字的对象是不可能的(对于无模式的NoSQL引擎来说,它是非常复杂的)。

一个简单的解决办法是推 - 在索引时间 - 一个标签内指定,如果该属性设置与否:

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

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

在查询时,您将与过滤检索tag

index.search('your query', { filters: 'myattr_unset', ... }) 
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开始计数,这可以很容易地仅仅通过增加1至每个print语句改变。

+0

抱歉,我才意识到我的问题是如何措辞通用beforeha ND。我已经编辑它更具体使用Algolia。如果我从索引中获取所有对象,那么您的解决方案绝对可用,但我试图避免这种情况,并让该技术为我工作。 – user2109431820398

相关问题