इस पेज पर, Cloud Firestore का इस्तेमाल करके, के-नियरेस्ट नेबर (केएनएन) वेक्टर सर्च करने का तरीका बताया गया है. इसके लिए, इन तकनीकों का इस्तेमाल किया जाता है:
- वेक्टर वैल्यू सेव करना
- केएनएन वेक्टर इंडेक्स बनाना और मैनेज करना
- वेक्टर डिस्टेंस मेज़रमेंट के लिए इस्तेमाल किए जाने वाले किसी एक तरीके का इस्तेमाल करके, K-नियरेस्ट-नेबर (केएनएन) क्वेरी करना
शुरू करने से पहले
Cloud Firestore में एंबेडिंग सेव करने से पहले, आपको वेक्टर एंबेडिंग जनरेट करनी होंगी. Cloud Firestore, एंबेडिंग जनरेट नहीं करता. वेक्टर वैल्यू बनाने के लिए, Agent Platform जैसी सेवा का इस्तेमाल किया जा सकता है. उदाहरण के लिए, अपने Cloud Firestore डेटा से टेक्स्ट एंबेडिंग बनाना. इसके बाद, इन एंबेडिंग को फिर से Cloud Firestore दस्तावेज़ों में सेव किया जा सकता है.
एंबेडिंग के बारे में ज़्यादा जानने के लिए, एंबेडिंग क्या हैं? लेख पढ़ें
Agent Platform की मदद से टेक्स्ट एंबेडिंग पाने का तरीका जानने के लिए, टेक्स्ट एंबेडिंग पाना लेख पढ़ें.
वेक्टर एंबेडिंग को सेव करना
यहां दिए गए उदाहरणों में, Cloud Firestore में वेक्टर एंबेडिंग को सेव करने का तरीका बताया गया है.
वेक्टर एंबेडिंग के साथ लिखने की प्रोसेस
यहां दिए गए उदाहरण में, Cloud Firestore दस्तावेज़ में वेक्टर एंबेडिंग को सेव करने का तरीका बताया गया है:
Python
Node.js
import { Firestore, FieldValue, } from "@google-cloud/firestore"; const db = new Firestore(); const coll = db.collection('coffee-beans'); await coll.add({ name: "Kahawa coffee beans", description: "Information about the Kahawa coffee beans.", embedding_field: FieldValue.vector([1.0 , 2.0, 3.0]) });
जाएं
Java
import com.google.cloud.firestore.CollectionReference; import com.google.cloud.firestore.DocumentReference; import com.google.cloud.firestore.FieldValue; import com.google.cloud.firestore.VectorQuery; CollectionReference coll = firestore.collection("coffee-beans"); Map<String, Object> docData = new HashMap<>(); docData.put("name", "Kahawa coffee beans"); docData.put("description", "Information about the Kahawa coffee beans."); docData.put("embedding_field", FieldValue.vector(new double[] {1.0, 2.0, 3.0})); ApiFuture<DocumentReference> future = coll.add(docData); DocumentReference documentReference = future.get();
Cloud फ़ंक्शन की मदद से वेक्टर एम्बेडिंग जनरेट करना
जब भी कोई दस्तावेज़ अपडेट या बनाया जाए, तब वेक्टर एंबेडिंग को कैलकुलेट और स्टोर करने के लिए, Cloud फ़ंक्शन सेट अप किया जा सकता है:
Python
@functions_framework.cloud_event def store_embedding(cloud_event) -> None: """Triggers by a change to a Firestore document. """ firestore_payload = firestore.DocumentEventData() payload = firestore_payload._pb.ParseFromString(cloud_event.data) collection_id, doc_id = from_payload(payload) # Call a function to calculate the embedding embedding = calculate_embedding(payload) # Update the document doc = firestore_client.collection(collection_id).document(doc_id) doc.set({"embedding_field": embedding}, merge=True)
Node.js
/** * A vector embedding will be computed from the * value of the `content` field. The vector value * will be stored in the `embedding` field. The * field names `content` and `embedding` are arbitrary * field names chosen for this example. */ async function storeEmbedding(event: FirestoreEvent<any>): Promise<void> { // Get the previous value of the document's `content` field. const previousDocumentSnapshot = event.data.before as QueryDocumentSnapshot; const previousContent = previousDocumentSnapshot.get("content"); // Get the current value of the document's `content` field. const currentDocumentSnapshot = event.data.after as QueryDocumentSnapshot; const currentContent = currentDocumentSnapshot.get("content"); // Don't update the embedding if the content field did not change if (previousContent === currentContent) { return; } // Call a function to calculate the embedding for the value // of the `content` field. const embeddingVector = calculateEmbedding(currentContent); // Update the `embedding` field on the document. await currentDocumentSnapshot.ref.update({ embedding: embeddingVector, }); }
जाएं
// Not yet supported in the Go client library
Java
// Not yet supported in the Java client library
वेक्टर इंडेक्स बनाना और मैनेज करना
वेक्टर एंबेडिंग की मदद से, सबसे नज़दीकी पड़ोसी की खोज करने से पहले, आपको उससे जुड़ा इंडेक्स बनाना होगा. यहां दिए गए उदाहरणों में, Google Cloud CLI और कंसोल की मदद से वेक्टर इंडेक्स बनाने और उन्हें मैनेज करने का तरीका बताया गया है. Firebase सीएलआई और Terraform की मदद से भी वेक्टर इंडेक्स मैनेज किए जा सकते हैं.
वेक्टर इंडेक्स बनाना
Google Cloud कंसोल
Google Cloud Console से मैन्युअल तरीके से नया इंडेक्स बनाने के लिए:
- Google Cloud console में, डेटाबेस पेज पर जाएं.
- डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत हो.
- नेविगेशन मेन्यू में, इंडेक्स पर क्लिक करें. इसके बाद, मैन्युअल टैब पर क्लिक करें.
- इंडेक्स बनाएं पर क्लिक करें.
वेक्टर सर्च के लिए किसी वेक्टर फ़ील्ड को इंडेक्स करने के लिए, वेक्टर इंडेक्स बनाएं को चुनें.
-
कलेक्शन आईडी डालें. वेक्टर फ़ील्ड पाथ और वेक्टर एंबेडिंग डाइमेंशन की संख्या डालें. आपको जिन अतिरिक्त फ़ील्ड को इंडेक्स करना है उनके नाम और हर फ़ील्ड के लिए इंडेक्स मोड जोड़ें.
इंडेक्स सेव करें पर क्लिक करें.
आपका नया इंडेक्स, मैन्युअल इंडेक्स की सूची में दिखेगा. साथ ही, Cloud Firestore आपका इंडेक्स बनाना शुरू कर देगा. इंडेक्स बन जाने के बाद, आपको इंडेक्स के बगल में हरे रंग का सही का निशान दिखेगा.
gcloud
वेक्टर इंडेक्स बनाने से पहले, Google Cloud CLI के नए वर्शन पर अपग्रेड करें:
gcloud components update
वेक्टर इंडेक्स बनाने के लिए, gcloud firestore indexes composite create का इस्तेमाल करें:
gcloud firestore indexes composite create \ --collection-group=collection-group \ --query-scope=COLLECTION \ --field-config field-path=vector-field,vector-config='vector-configuration' \ --database=database-id
जहां:
- collection-group, कलेक्शन ग्रुप का आईडी है.
- vector-field उस फ़ील्ड का नाम है जिसमें वेक्टर एंबेडिंग शामिल है.
- database-id, डेटाबेस का आईडी है.
- vector-configuration में वेक्टर
dimensionऔर इंडेक्स टाइप शामिल है.dimension, 2048 तक का कोई पूर्णांक होता है. इंडेक्स का टाइपflatहोना चाहिए. इंडेक्स कॉन्फ़िगरेशन को इस तरह फ़ॉर्मैट करें:{"dimension":"DIMENSION", "flat": "{}"}.
यहां दिए गए उदाहरण में, कंपोज़िट इंडेक्स बनाया गया है. इसमें फ़ील्ड vector-field के लिए वेक्टर इंडेक्स और फ़ील्ड color के लिए बढ़ते क्रम में इंडेक्स शामिल है. इस तरह के इंडेक्स का इस्तेमाल, नियरेस्ट नेबर सर्च से पहले डेटा को पहले से फ़िल्टर करने के लिए किया जा सकता है.
gcloud firestore indexes composite create \ --collection-group=collection-group \ --query-scope=COLLECTION \ --field-config=order=ASCENDING,field-path="color" \ --field-config field-path=vector-field,vector-config='{"dimension":"1024", "flat": "{}"}' \ --database=database-id
सभी वेक्टर इंडेक्स की सूची बनाना
Google Cloud कंसोल
- Google Cloud console में, डेटाबेस पेज पर जाएं.
- डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत हो.
-
नेविगेशन मेन्यू में, इंडेक्स पर क्लिक करें. इसके बाद, मैन्युअल टैब पर क्लिक करें.
इंडेक्स टेबल में, डेटाबेस के सभी इंडेक्स की सूची होती है. वेक्टर इंडेक्स में, आइकॉन वाला वेक्टर फ़ील्ड शामिल होता है.
gcloud
सभी इंडेक्स की सूची देखने और इंडेक्स आईडी पाने के लिए:
gcloud firestore indexes composite list --database=database-id
database-id को डेटाबेस के आईडी से बदलें.
इंडेक्स आईडी का इस्तेमाल करके, किसी इंडेक्स के बारे में ज़्यादा जानकारी देखी जा सकती है:
gcloud firestore indexes composite describe index-id --database=database-id
जहां:
- index-id, उस इंडेक्स का आईडी है जिसके बारे में जानकारी देनी है.
- database-id, डेटाबेस का आईडी है.
वेक्टर इंडेक्स मिटाना
Google Cloud कंसोल
- Google Cloud console में, डेटाबेस पेज पर जाएं.
- डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत हो.
-
नेविगेशन मेन्यू में, इंडेक्स पर क्लिक करें. इसके बाद, मैन्युअल टैब पर क्लिक करें.
- मैन्युअल इंडेक्स की सूची में, उस इंडेक्स के लिए ज़्यादा बटन पर क्लिक करें जिसे आपको मिटाना है. मिटाएं पर क्लिक करें.
- सूचना में जाकर, इंडेक्स मिटाएं पर क्लिक करके पुष्टि करें कि आपको यह इंडेक्स मिटाना है.
gcloud
gcloud firestore indexes composite delete index-id --database=database-id
जहां:
- index-id, मिटाए जाने वाले इंडेक्स का आईडी है.
इंडेक्स आईडी वापस पाने के लिए,
indexes composite listका इस्तेमाल करें. - database-id, डेटाबेस का आईडी है.
नियरेस्ट नेबर क्वेरी बनाना
वेक्टर एंबेडिंग के सबसे नज़दीकी पॉइंट ढूंढने के लिए, मिलती-जुलती जानकारी खोजी जा सकती है. मिलती-जुलती जानकारी खोजने के लिए, वेक्टर इंडेक्स ज़रूरी हैं. अगर कोई इंडेक्स मौजूद नहीं है, तो Cloud Firestore, gcloud CLI का इस्तेमाल करके इंडेक्स बनाने का सुझाव देता है.
यहां दिए गए उदाहरण में, क्वेरी वेक्टर के सबसे नज़दीक मौजूद 10 वेक्टर खोजे गए हैं.
Python
Node.js
import { Firestore, FieldValue, VectorQuery, VectorQuerySnapshot, } from "@google-cloud/firestore"; // Requires a single-field vector index const vectorQuery: VectorQuery = coll.findNearest({ vectorField: 'embedding_field', queryVector: [3.0, 1.0, 2.0], limit: 10, distanceMeasure: 'EUCLIDEAN' }); const vectorQuerySnapshot: VectorQuerySnapshot = await vectorQuery.get();
जाएं
Java
import com.google.cloud.firestore.VectorQuery; import com.google.cloud.firestore.VectorQuerySnapshot; VectorQuery vectorQuery = coll.findNearest( "embedding_field", new double[] {3.0, 1.0, 2.0}, /* limit */ 10, VectorQuery.DistanceMeasure.EUCLIDEAN); ApiFuture<VectorQuerySnapshot> future = vectorQuery.get(); VectorQuerySnapshot vectorQuerySnapshot = future.get();
वेक्टर दूरी
सबसे नज़दीकी पड़ोसी क्वेरी, वेक्टर डिस्टेंस के लिए इन विकल्पों के साथ काम करती हैं:
EUCLIDEAN: यह वेक्टर के बीच कीEUCLIDEANदूरी को मापता है. ज़्यादा जानने के लिए, यूक्लिडियन देखें.COSINE: यह वेक्टर के बीच के कोण के आधार पर उनकी तुलना करता है. इससे आपको ऐसी समानता का पता लगाने में मदद मिलती है जो वेक्टर के मैग्नीट्यूड पर आधारित नहीं होती. हमारा सुझाव है कि आप COSINE डिस्टेंस के बजाय, यूनिट नॉर्मलाइज़्ड वेक्टर के साथDOT_PRODUCTका इस्तेमाल करें. यह गणितीय तौर पर बराबर है और बेहतर परफ़ॉर्मेंस देता है. ज़्यादा जानने के लिए, कोसाइन सिमिलैरिटी देखें.DOT_PRODUCT: यहCOSINEकी तरह ही है, लेकिन इस पर वेक्टर के मैग्नीट्यूड का असर पड़ता है. ज़्यादा जानने के लिए, डॉट प्रॉडक्ट देखें.
दूरी मापने की इकाई चुनें
आपके सभी वेक्टर एंबेडिंग को नॉर्मलाइज़ किया गया है या नहीं, इसके आधार पर यह तय किया जा सकता है कि दूरी का पता लगाने के लिए, दूरी के किस मेज़र का इस्तेमाल करना है. नॉर्मलाइज़्ड वेक्टर एंबेडिंग का मैग्नीट्यूड (लंबाई) ठीक 1.0 होता है.
इसके अलावा, अगर आपको पता है कि आपके मॉडल को किस दूरी के हिसाब से ट्रेनिंग दी गई है, तो अपने वेक्टर एंबेडिंग के बीच की दूरी का हिसाब लगाने के लिए, दूरी के उस माप का इस्तेमाल करें.
नॉर्मलाइज़ किया गया डेटा
अगर आपके पास ऐसा डेटासेट है जिसमें सभी वेक्टर एंबेडिंग को नॉर्मलाइज़ किया गया है, तो दूरी के तीनों मेज़रमेंट, सिमैंटिक सर्च के एक जैसे नतीजे देते हैं. कुल मिलाकर, भले ही हर दूरी का माप अलग-अलग वैल्यू दिखाता हो, लेकिन वे वैल्यू एक ही तरह से क्रम में लगाई जाती हैं. जब एंबेडिंग को नॉर्मलाइज़ किया जाता है, तो आम तौर पर DOT_PRODUCT सबसे ज़्यादा कंप्यूटेशनल तौर पर असरदार होता है. हालांकि, ज़्यादातर मामलों में अंतर न के बराबर होता है. हालांकि, अगर आपका ऐप्लिकेशन परफ़ॉर्मेंस के लिहाज़ से काफ़ी संवेदनशील है, तो DOT_PRODUCT से परफ़ॉर्मेंस को बेहतर बनाने में मदद मिल सकती है.
नॉर्मलाइज़ नहीं किया गया डेटा
अगर आपके पास ऐसा डेटासेट है जिसमें वेक्टर एंबेडिंग को नॉर्मलाइज़ नहीं किया गया है, तो दूरी मापने के लिए DOT_PRODUCT का इस्तेमाल करना गणित के हिसाब से सही नहीं है. इसकी वजह यह है कि डॉट प्रॉडक्ट, दूरी को नहीं मापता. एंबेडिंग कैसे जनरेट की गई थीं और किस तरह की खोज को प्राथमिकता दी गई है, इसके आधार पर COSINE या EUCLIDEAN डिस्टेंस मेज़र, खोज के ऐसे नतीजे जनरेट करता है जो अन्य डिस्टेंस मेज़र की तुलना में बेहतर होते हैं.
आपके इस्तेमाल के उदाहरण के लिए कौनसा मॉडल सबसे सही है, यह तय करने के लिए COSINE या EUCLIDEAN के साथ एक्सपेरिमेंट करना ज़रूरी हो सकता है.
यह पक्का नहीं है कि डेटा नॉर्मलाइज़ किया गया है या नहीं
अगर आपको पक्के तौर पर नहीं पता है कि आपका डेटा नॉर्मलाइज़ किया गया है या नहीं और आपको DOT_PRODUCT का इस्तेमाल करना है, तो हमारा सुझाव है कि आप इसके बजाय COSINE का इस्तेमाल करें.
COSINE, DOT_PRODUCT की तरह है. इसमें नॉर्मलाइज़ेशन की सुविधा पहले से मौजूद होती है.
COSINE का इस्तेमाल करके मापी गई दूरी, 0 से 2 के बीच होती है. 0 के करीब का नतीजा बताता है कि वेक्टर काफ़ी मिलते-जुलते हैं.
दस्तावेज़ों को पहले से फ़िल्टर करना
सबसे मिलते-जुलते दस्तावेज़ों को खोजने से पहले, दस्तावेज़ों को फ़िल्टर किया जा सकता है. इसके लिए, मिलते-जुलते दस्तावेज़ों को खोजने की सुविधा को अन्य क्वेरी ऑपरेटर के साथ जोड़ा जा सकता है. and और or कंपोज़िट फ़िल्टर इस्तेमाल किए जा सकते हैं. इस्तेमाल किए जा सकने वाले फ़ील्ड फ़िल्टर के बारे में ज़्यादा जानने के लिए, क्वेरी ऑपरेटर लेख पढ़ें.
Python
Node.js
// Similarity search with pre-filter // Requires composite vector index const preFilteredVectorQuery: VectorQuery = coll .where("color", "==", "red") .findNearest({ vectorField: "embedding_field", queryVector: [3.0, 1.0, 2.0], limit: 5, distanceMeasure: "EUCLIDEAN", }); const vectorQueryResults = await preFilteredVectorQuery.get();
जाएं
Java
import com.google.cloud.firestore.VectorQuery; import com.google.cloud.firestore.VectorQuerySnapshot; VectorQuery preFilteredVectorQuery = coll .whereEqualTo("color", "red") .findNearest( "embedding_field", new double[] {3.0, 1.0, 2.0}, /* limit */ 10, VectorQuery.DistanceMeasure.EUCLIDEAN); ApiFuture<VectorQuerySnapshot> future = preFilteredVectorQuery.get(); VectorQuerySnapshot vectorQuerySnapshot = future.get();
कैलकुलेट की गई वेक्टर दूरी को वापस पाना
कैलकुलेट की गई वेक्टर दूरी को वापस पाने के लिए, FindNearest क्वेरी पर distance_result_field आउटपुट प्रॉपर्टी का नाम असाइन करें. इसके बारे में यहां दिए गए उदाहरण में बताया गया है:
Python
Node.js
const vectorQuery: VectorQuery = coll.findNearest( { vectorField: 'embedding_field', queryVector: [3.0, 1.0, 2.0], limit: 10, distanceMeasure: 'EUCLIDEAN', distanceResultField: 'vector_distance' }); const snapshot: VectorQuerySnapshot = await vectorQuery.get(); snapshot.forEach((doc) => { console.log(doc.id, ' Distance: ', doc.get('vector_distance')); });
जाएं
Java
import com.google.cloud.firestore.VectorQuery; import com.google.cloud.firestore.VectorQueryOptions; import com.google.cloud.firestore.VectorQuerySnapshot; VectorQuery vectorQuery = coll.findNearest( "embedding_field", new double[] {3.0, 1.0, 2.0}, /* limit */ 10, VectorQuery.DistanceMeasure.EUCLIDEAN, VectorQueryOptions.newBuilder().setDistanceResultField("vector_distance").build()); ApiFuture<VectorQuerySnapshot> future = vectorQuery.get(); VectorQuerySnapshot vectorQuerySnapshot = future.get(); for (DocumentSnapshot document : vectorQuerySnapshot.getDocuments()) { System.out.println(document.getId() + " Distance: " + document.get("vector_distance")); }
अगर आपको distanceResultField के साथ-साथ दस्तावेज़ के फ़ील्ड का सबसेट दिखाने के लिए, फ़ील्ड मास्क का इस्तेमाल करना है, तो आपको फ़ील्ड मास्क में distanceResultField की वैल्यू भी शामिल करनी होगी. इसके बारे में यहां दिए गए उदाहरण में बताया गया है:
Python
Node.js
const vectorQuery: VectorQuery = coll .select('name', 'description', 'vector_distance') .findNearest({ vectorField: 'embedding_field', queryVector: [3.0, 1.0, 2.0], limit: 10, distanceMeasure: 'EUCLIDEAN', distanceResultField: 'vector_distance' });
जाएं
Java
import com.google.cloud.firestore.VectorQuery; import com.google.cloud.firestore.VectorQueryOptions; import com.google.cloud.firestore.VectorQuerySnapshot; VectorQuery vectorQuery = coll .select("name", "description", "vector_distance") .findNearest( "embedding_field", new double[] {3.0, 1.0, 2.0}, /* limit */ 10, VectorQuery.DistanceMeasure.EUCLIDEAN, VectorQueryOptions.newBuilder() .setDistanceResultField("vector_distance") .build()); ApiFuture<VectorQuerySnapshot> future = vectorQuery.get(); VectorQuerySnapshot vectorQuerySnapshot = future.get(); for (DocumentSnapshot document : vectorQuerySnapshot.getDocuments()) { System.out.println(document.getId() + " Distance: " + document.get("vector_distance")); }
दूरी का थ्रेशोल्ड तय करना
मिलती-जुलती ऑडियंस का थ्रेशोल्ड तय किया जा सकता है. इससे, सिर्फ़ थ्रेशोल्ड के अंदर मौजूद दस्तावेज़ दिखेंगे. थ्रेशोल्ड फ़ील्ड का व्यवहार, आपके चुने गए दूरी के माप पर निर्भर करता है:
EUCLIDEANऔरCOSINEदूरी, थ्रेशोल्ड को उन दस्तावेज़ों तक सीमित करती है जहां दूरी, तय किए गए थ्रेशोल्ड से कम या उसके बराबर होती है. वेक्टर जितने ज़्यादा मिलते-जुलते होते हैं, दूरी के ये मेज़र उतने ही कम होते हैं.DOT_PRODUCTदूरी, थ्रेशोल्ड को उन दस्तावेज़ों तक सीमित करती है जहां दूरी, तय किए गए थ्रेशोल्ड से ज़्यादा या उसके बराबर होती है. वेक्टर जितने ज़्यादा मिलते-जुलते होते हैं, डॉट प्रॉडक्ट डिस्टेंस उतना ही बढ़ता है.
यहां दिए गए उदाहरण में, दूरी की थ्रेशोल्ड तय करने का तरीका बताया गया है. इससे, EUCLIDEAN दूरी की मेट्रिक का इस्तेमाल करके, ज़्यादा से ज़्यादा 10 सबसे नज़दीकी दस्तावेज़ दिखाए जा सकते हैं. ये दस्तावेज़, ज़्यादा से ज़्यादा 4.5 यूनिट की दूरी पर होने चाहिए:
Python
Node.js
const vectorQuery: VectorQuery = coll.findNearest({ vectorField: 'embedding_field', queryVector: [3.0, 1.0, 2.0], limit: 10, distanceMeasure: 'EUCLIDEAN', distanceThreshold: 4.5 }); const snapshot: VectorQuerySnapshot = await vectorQuery.get(); snapshot.forEach((doc) => { console.log(doc.id); });
जाएं
Java
import com.google.cloud.firestore.VectorQuery; import com.google.cloud.firestore.VectorQueryOptions; import com.google.cloud.firestore.VectorQuerySnapshot; VectorQuery vectorQuery = coll.findNearest( "embedding_field", new double[] {3.0, 1.0, 2.0}, /* limit */ 10, VectorQuery.DistanceMeasure.EUCLIDEAN, VectorQueryOptions.newBuilder() .setDistanceThreshold(4.5) .build()); ApiFuture<VectorQuerySnapshot> future = vectorQuery.get(); VectorQuerySnapshot vectorQuerySnapshot = future.get(); for (DocumentSnapshot document : vectorQuerySnapshot.getDocuments()) { System.out.println(document.getId()); }
सीमाएं
वेक्टर एंबेडिंग का इस्तेमाल करते समय, इन सीमाओं का ध्यान रखें:
- ज़्यादा से ज़्यादा 2048 एंबेडिंग डाइमेंशन इस्तेमाल किए जा सकते हैं. बड़े इंडेक्स सेव करने के लिए, डाइमेंशनलिटी रिडक्शन का इस्तेमाल करें.
- नियरेस्ट-नेबर क्वेरी से ज़्यादा से ज़्यादा 1,000 दस्तावेज़ दिखाए जा सकते हैं. यह सीमा सिर्फ़ स्टैंडर्ड वर्शन के लिए है.
- वेक्टर सर्च की सुविधा, रीयल-टाइम स्नैपशॉट लिसनर के साथ काम नहीं करती.
- सिर्फ़ Python, Node.js, Go, और Java क्लाइंट लाइब्रेरी में वेक्टर सर्च की सुविधा काम करती है.
आगे क्या करना है
- Cloud Firestore के लिए सबसे सही तरीकों के बारे में पढ़ें.
- बड़े पैमाने पर डेटा को पढ़ने और लिखने के बारे में जानें.