2016-11-15 40 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

相關問題