2016-11-15 1 views
0



{"object_id":1、 "color": "red"、 "shape": "circle"}
{"object_id":2 " "color": "green"、 "shape": "square"}
{"object_id":4、 "color": "blue"、 "shape" :null、 "shape": "hexagon"}
{"object_id":5、 "shape": "hexagon"}
...

Algolia用のPython APIを使用して、それらは両方とも「色」属性がないので、4および5のようなオブジェクトは戻ってくる。

私は(https://www.algolia.com/doc/api-client/python/search#search-in-an-index)をドラッグしていますが、答えが見つかりません。 ( 'YourAPIKey'、 "YourApplicationID")
algoliasearch輸入algoliasearch

クライアント= algoliasearch.Clientから
指数= client.init_index( "colorful_shapes:

特定のキーが見つからないすべてのドキュメントを見つけるためにAlgoliaにクエリを実行するにはどうすればよいですか?

私はこのスニペットが、運を試してみました")
RES = index.search(" NULL ")
RES1 = index.search(" 色= NULL ")
RES2 = index.search(" 色:NULL」)
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

私はよりエレガントな解決策があると確信しているが、これはあなたが提供する何のために働くようだ(また、私は仮定あなたnullNoneを意図していた):

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を加えるだけで簡単に変更できます。

+0

申し訳ありません申し訳ありませんnd。私はそれをAlgoliaの使用に特化して編集しました。インデックスからすべてのオブジェクトを取得すると、あなたのソリューションは確実に使えますが、私はそのシナリオを避け、技術が私のために働くようにしています。 – user2109431820398

関連する問題