फिल्टर्ड वेक्टर सर्च रणनीति: Azure AI Search में वेक्टर क्वेरीज़ पर फ़िल्टर लागू करना
Azure AI Search में फिल्टर्ड वेक्टर सर्च वेक्टर समानता को मेटाडेटा फ़िल्टरिंग के साथ जोड़ता है। प्री-फ़िल्टरिंग स्कोरिंग से पहले कैंडिडेट सेट को कम करती है, जिससे लेटेंसी कम हो सकती है लेकिन रिकॉल लॉस का जोखिम रहता है। पोस्ट-फ़िल्टरिंग रिकॉल को सुरक्षित रखती है लेकिन कम परिणाम दे सकती है। आपके डेटा के लिए सही संतुलन खोजने के लिए दोनों मोड का परीक्षण आवश्यक है।
इस पृष्ठ पर
संक्षिप्त उत्तर
Azure AI Search में फिल्टर्ड वेक्टर सर्च आपको वेक्टर क्वेरी के साथ एक फ़िल्टर एक्सप्रेशन जोड़ने की अनुमति देता है। यह फ़िल्टर नॉन-वेक्टर मेटाडेटा फ़ील्ड्स को लक्षित करता है, न कि स्वयं वेक्टर फ़ील्ड को। इंजन वेक्टर समानता स्कोरिंग से पहले या बाद में फ़िल्टर लागू कर सकता है। प्री-फ़िल्टरिंग निकटतम-पड़ोसी (nearest-neighbor) खोज से पहले कैंडिडेट सेट को सीमित करती है, जिससे उन प्रासंगिक दस्तावेज़ों के छूटने की संभावना रहती है जो मेटाडेटा शर्त को पूरा नहीं करते, लेकिन यह चुनिंदा फ़िल्टर्स के लिए लेटेंसी कम कर सकता है। पोस्ट-फ़िल्टरिंग पूरे इंडेक्स पर समानता की गणना करती है और फिर गैर-मिलान वाले परिणामों को हटा देती है, जिससे संभावित रूप से k से कम दस्तावेज़ वापस मिलते हैं। यह एक रणनीतिक निर्णय है: सिमेंटिक रेंकर का उपयोग करते समय अक्सर पोस्ट-फ़िल्टरिंग की सिफारिश की जाती है क्योंकि इसे एक बड़े कैंडिडेट पूल की आवश्यकता होती है, लेकिन दस्तावेज़ आपके डेटा के लिए दोनों मोड के परीक्षण की सलाह देते हैं। इसे लागू करने के लिए, आपको अपने वेक्टर फ़ील्ड्स के साथ फ़िल्टर करने योग्य टेक्स्ट या न्यूमेरिक फ़ील्ड्स डिज़ाइन करने होंगे, और क्वेरी अनुरोध में vectorFilterMode पैरामीटर सेट करना होगा।
Azure AI Search में फिल्टर्ड वेक्टर सर्च का अर्थ
Azure AI Search में फिल्टर्ड वेक्टर सर्च का अर्थ है एक ऐसी क्वेरी में फ़िल्टर एक्सप्रेशन जोड़ना जिसमें वेक्टर क्वेरी भी शामिल हो। फ़िल्टर इंडेक्स स्कीमा में टेक्स्ट या न्यूमेरिक फ़ील्ड्स पर काम करता है, न कि स्वयं वेक्टर फ़ील्ड पर। यह आपको एम्बेडिंग्स पर निकटतम-पड़ोसी समानता खोज करते समय मेटाडेटा मानदंडों के आधार पर दस्तावेज़ों को शामिल करने या बाहर करने की अनुमति देता है। इंजन वेक्टर क्वेरी निष्पादन से पहले या बाद में फ़िल्टर को प्रोसेस कर सकता है, जिससे यह बदल जाता है कि कौन से दस्तावेज़ समानता-स्कोरिंग पाइपलाइन में प्रवेश करते हैं।
व्यावहारिक सुझाव
प्री-फ़िल्टरिंग kNN स्कोरिंग से पहले कैंडिडेट सेट को कम करती है, जिससे तब लेटेंसी कम हो सकती है जब फ़िल्टर अत्यधिक चयनात्मक (highly selective) हो। हालाँकि, क्योंकि यह वैचारिक रूप से प्रासंगिक दस्तावेज़ों को चुपचाप हटा सकता है, दस्तावेज़ आपके विशिष्ट डेटा वितरण के लिए ट्रेड-ऑफ की पुष्टि करने हेतु प्रतिनिधि क्वेरीज़ के साथ प्री-फ़िल्टर और पोस्ट-फ़िल्टर दोनों मोड की बेंचमार्किंग करने की सलाह देते हैं।
प्री-फ़िल्टर बनाम पोस्ट-फ़िल्टर: मुख्य निर्णय
सर्च इंजन वेक्टर क्वेरी निष्पादित करने से पहले या बाद में फ़िल्टर लागू कर सकता है। यह एक रणनीतिक निर्णय है, न कि सिंटैक्स का चुनाव, और यह सीधे कैंडिडेट पूल के आकार को प्रभावित करता है। प्री-फ़िल्टरिंग में, फ़िल्टर पहले चलता है और उन दस्तावेज़ों के सेट को कम करता है जिन्हें वेक्टर सर्च स्कोर करेगा। पोस्ट-फ़िल्टरिंग में, वेक्टर सर्च पूरे इंडेक्स पर चलता है, और फ़िल्टर बाद में गैर-मिलान वाले परिणामों को हटा देता है। यह चुनाव रिकॉल, प्रिसिजन और वापस किए गए परिणामों की संख्या को प्रभावित करता है। दस्तावेज़ किसी एक सार्वभौमिक सर्वोत्तम मोड का सुझाव नहीं देते हैं; वे यह निर्धारित करने के लिए दोनों का परीक्षण करने की सलाह देते हैं कि आपके परिदृश्य के लिए कौन सा काम करता है।
फ़िल्टर करने योग्य मेटाडेटा फ़ील्ड्स डिज़ाइन करना
चूंकि वेक्टर फ़ील्ड फ़िल्टर करने योग्य नहीं होते हैं, इसलिए हर वह विशेषता जिसे आप क्वेरी के समय सीमित करना चाहते हैं, उसे एक अलग नॉन-वेक्टर फ़ील्ड में संग्रहीत किया जाना चाहिए जिसे इंडेक्स स्कीमा में फ़िल्टर करने योग्य (filterable) के रूप में चिह्नित किया गया हो। उदाहरण के लिए, यदि आप श्रेणी, स्थान या तिथि के आधार पर फ़िल्टर करना चाहते हैं, तो आपको उन गुणों के लिए टेक्स्ट या न्यूमेरिक फ़ील्ड बनाने होंगे और उनके filterable एट्रिब्यूट को true पर सेट करना होगा। क्वेरी में फ़िल्टर एक्सप्रेशन इन फ़ील्ड्स का संदर्भ देता है, न कि वेक्टर फ़ील्ड का। इनके बिना, फिल्टर्ड वेक्टर सर्च असंभव है। यह स्कीमा डिज़ाइन चरण एक पूर्व-आवश्यकता है जिसे किसी भी क्वेरी द्वारा वेक्टर सर्च के साथ फ़िल्टर का उपयोग करने से पहले पूरा किया जाना चाहिए।
vectorFilterMode पैरामीटर और एक ठोस क्वेरी
हाइब्रिड सर्च दस्तावेज़ एक ठोस क्वेरी प्रदान करते हैं जो व्यवहार में फिल्टर्ड वेक्टर सर्च को प्रदर्शित करती है। अनुरोध में एक बिंदु के 300 किलोमीटर के भीतर होटल खोजने के लिए geo.distance का उपयोग करने वाला एक फ़िल्टर एक्सप्रेशन शामिल है, और vectorFilterMode को postFilter पर सेट करता है। क्वेरी में फुल-टेक्स्ट सर्च, विभिन्न वेक्टर फ़ील्ड्स को लक्षित करने वाली दो वेक्टर क्वेरीज़, फेसेट्स और सिमेंटिक रैंकिंग भी शामिल है। फ़िल्टर geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300 है, और vectorFilterMode postFilter है। इसका मतलब है कि इंजन पहले सभी होटलों में एम्बेडिंग समानता के आधार पर 50 निकटतम पड़ोसियों को खोजता है, फिर दायरे से बाहर वालों को हटा देता है। परिणाम सेट में 50 से कम दस्तावेज़ हो सकते हैं। वेक्टर क्वेरीज़ रिकॉल में सुधार के लिए k=50 और ओवरसैंपलिंग निर्दिष्ट करती हैं। यह उदाहरण दिखाता है कि कैसे फ़िल्टर, वेक्टर क्वेरीज़ और अन्य सुविधाएँ एक ही अनुरोध में सह-अस्तित्व में रहती हैं।
POST https://{{searchServiceName}}.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2026-04-01
content-type: application/JSON
{
"count": true,
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelId, HotelName, Category, Description, Address/City, Address/StateProvince",
"filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",
"vectorFilterMode": "postFilter",
"facets": ["Address/StateProvince"],
"vectorQueries": [
{
"kind": "vector",
"vector": [<array of embeddings>],
"k": 50,
"fields": "DescriptionVector",
"exhaustive": true,
"oversampling": 20
},
{
"kind": "vector",
"vector": [<array of embeddings>],
"k": 50,
"fields": "Description_frVector",
"exhaustive": false,
"oversampling": 10
}
],
"skip": 0,
"top": 10,
"queryType": "semantic",
"queryLanguage": "en-us",
"semanticConfiguration": "my-semantic-config"
}सिमेंटिक रेंकर के साथ इंटरैक्शन
सिमेंटिक रेंकर का उपयोग करते समय, दस्तावेज़ शुरुआती बिंदु के रूप में पोस्ट-फ़िल्टरिंग का सुझाव देते हैं। इसका कारण यह है कि सिमेंटिक रेंकर को पढ़ने और पुन: व्यवस्थित करने के लिए एक बड़े कैंडिडेट पूल की आवश्यकता होती है। प्री-फ़िल्टरिंग इस पूल को बहुत कम कर सकती है, जिससे रेंकर की प्रभावशीलता सीमित हो जाती है। हालांकि, यह कोई सख्त नियम नहीं है; स्रोत स्पष्ट रूप से यह परीक्षण करने की सिफारिश करता है कि आपकी क्वेरीज़ के लिए कौन सा व्यवहार सबसे अच्छा है। सिमेंटिक रेंकर फुल-टेक्स्ट और वेक्टर सर्च के मर्ज किए गए परिणामों पर काम करता है, और फ़िल्टर को उस मर्ज से पहले या बाद में लागू किया जा सकता है, जो रेंकर के इनपुट को प्रभावित करता है। यदि आप सिमेंटिक रेंकर का उपयोग करते समय वेक्टर क्वेरीज़ के लिए k को 50 पर सेट करते हैं, तो आप रीरैंकिंग के लिए उपलब्ध इनपुट को अधिकतम करते हैं।
ट्रेड-ऑफ: प्री-फ़िल्टरिंग के तहत रिकॉल लॉस
प्री-फ़िल्टरिंग वेक्टर समानता की गणना होने से पहले कैंडिडेट सेट को सीमित कर देती है। यह उन वैचारिक रूप से प्रासंगिक दस्तावेज़ों को चुपचाप हटा सकता है जो मेटाडेटा शर्त को पूरा नहीं करते हैं, भले ही वे क्वेरी वेक्टर के बहुत समान हों। उदाहरण के लिए, एक होटल जो सिमेंटिक रूप से पूरी तरह मेल खाता है लेकिन भौगोलिक दायरे से ठीक बाहर है, उसे स्कोरिंग से पहले ही बाहर कर दिया जाएगा। पोस्ट-फ़िल्टरिंग पूरे इंडेक्स पर समानता की गणना करती है और फिर गैर-मिलान वाले परिणामों को हटा देती है, जो k से कम आइटम लौटा सकता है लेकिन यह सुनिश्चित करता है कि समानता रैंकिंग ने सभी दस्तावेज़ों पर विचार किया। इसका तात्पर्य यह है कि प्री-फ़िल्टर और पोस्ट-फ़िल्टर के बीच का चुनाव रिकॉल, परिणाम संख्या और लेटेंसी के बीच एक ट्रेड-ऑफ है। प्री-फ़िल्टरिंग k को सुरक्षित रखती है और चयनात्मक फ़िल्टर के लिए लेटेंसी कम कर सकती है लेकिन प्रासंगिक दस्तावेज़ों को खोने का जोखिम होता है; पोस्ट-फ़िल्टरिंग रिकॉल को सुरक्षित रखती है लेकिन कम परिणाम दे सकती है और अधिक गणना की आवश्यकता हो सकती है।
फ़ैसेट्स और स्कोरिंग प्रोफाइल के साथ फ़िल्टर को जोड़ना
फ़िल्टर और फ़ैसेट्स इंडेक्स के भीतर उन डेटा संरचनाओं को लक्षित करते हैं जो फुल-टेक्स्ट सर्च के लिए उपयोग किए जाने वाले इनवर्टेड इंडेक्स और वेक्टर सर्च के लिए उपयोग किए जाने वाले वेक्टर इंडेक्स से अलग होते हैं। जब फ़िल्टर और फ़ैसेटेड ऑपरेशन निष्पादित होते हैं, तो सर्च इंजन रिस्पॉन्स में हाइब्रिड सर्च परिणामों पर परिचालन परिणाम लागू कर सकता है। इसका मतलब है कि एक फ़िल्टर वेक्टर रैंकिंग के साथ संघर्ष किए बिना फ़ैसेटेड नेविगेशन और स्कोरिंग प्रोफाइल के साथ सह-अस्तित्व में रह सकता है। फ़ैसेट्स की गणना फ़िल्टरिंग और मर्जिंग के बाद अंतिम परिणाम सेट पर की जाती है। स्कोरिंग प्रोफाइल को टेक्स्ट फ़ील्ड पर लागू किया जा सकता है, लेकिन स्पष्ट सॉर्ट ऑर्डर प्रासंगिकता-रैंक परिणामों को ओवरराइड करते हैं, इसलिए यदि आप चाहते हैं कि समानता और BM25 प्रासंगिकता रैंकिंग को संचालित करें, तो orderby से बचें।
प्रयोज्यता सीमाएं और दृष्टिकोण पर पुनर्विचार कब करें
प्राथमिक बाधा यह है कि वेक्टर फ़ील्ड स्वयं फ़िल्टर करने योग्य नहीं होते हैं, इसलिए प्रत्येक फ़िल्टर मानदंड को एक अलग फ़ील्ड में होना चाहिए। पोस्ट-फ़िल्टरिंग अनुरोधित k से कम परिणाम दे सकती है, जिसे आपके एप्लिकेशन में संभालने की आवश्यकता हो सकती है। प्री-फ़िल्टरिंग रिकॉल को कम कर सकती है लेकिन अत्यधिक चयनात्मक फ़िल्टर के लिए लेटेंसी में सुधार कर सकती है। दस्तावेज़ यह पुष्टि करने के लिए परीक्षण की सिफारिश करते हैं कि कौन सा मोड सबसे अच्छा है, बजाय इसके कि एक ही सही उत्तर मान लिया जाए। यदि आपके फ़िल्टर मानदंड अत्यधिक चयनात्मक हैं और आपको सटीक k परिणामों की आवश्यकता है, तो आपको ओवरसैंपलिंग को समायोजित करने या फ़िल्टर डिज़ाइन पर पुनर्विचार करने की आवश्यकता हो सकती है। परीक्षण में वास्तविक वर्कलोड के तहत रिकॉल, प्रिसिजन और लेटेंसी को मापना शामिल होना चाहिए। यदि फ़िल्टर मोड और ओवरसैंपलिंग का कोई भी संयोजन स्वीकार्य परिणाम नहीं देता है, तो फ़िल्टर को कम प्रतिबंधात्मक बनाने या मेटाडेटा-अवेयर एम्बेडिंग रणनीतियों के माध्यम से कुछ बाधाओं को स्वयं वेक्टर एम्बेडिंग में ले जाने पर विचार करें।
क्या जाँचें
- सत्यापित करें कि क्वेरी में प्रत्येक फ़िल्टर मानदंड इंडेक्स स्कीमा में फ़िल्टर करने योग्य के रूप में चिह्नित नॉन-वेक्टर फ़ील्ड के अनुरूप है।
- पुष्टि करें कि हाइब्रिड क्वेरी अनुरोध में vectorFilterMode पैरामीटर को preFilter या postFilter पर सेट किया गया है।
- अपने विशिष्ट डेटासेट के लिए रिकॉल, लेटेंसी और परिणाम संख्या के इष्टतम संतुलन को निर्धारित करने के लिए प्रतिनिधि क्वेरीज़ के साथ प्री-फ़िल्टर और पोस्ट-फ़िल्टर दोनों मोड की बेंचमार्क करें।
- जांचें कि पोस्ट-फ़िल्टर्ड परिणामों में अनुरोधित k से कम दस्तावेज़ हो सकते हैं; इसे अपने एप्लिकेशन लॉजिक में संभालें।
- सुनिश्चित करें कि फेसेट्स और स्कोरिंग प्रोफाइल हाइब्रिड परिणाम सेट पर लागू होते हैं और वेक्टर रैंकिंग में हस्तक्षेप नहीं करते हैं।
उपयोग की सीमाएँ
वेक्टर फ़ील्ड्स का स्वयं फ़िल्टर एक्सप्रेशन में उपयोग नहीं किया जा सकता; प्रत्येक फ़िल्टर मानदंड के लिए एक समर्पित नॉन-वेक्टर फ़ील्ड की आवश्यकता होती है। पोस्ट-फ़िल्टरिंग अनुरोधित k से कम दस्तावेज़ वापस कर सकती है क्योंकि समानता की गणना पूरे इंडेक्स पर की जाती है और फिर परिणाम हटा दिए जाते हैं। प्री-फ़िल्टरिंग निकटतम-पड़ोसी खोज चलने से पहले कैंडिडेट पूल को सिकोड़कर रिकॉल को चुपचाप कम कर सकती है, हालांकि यह चयनात्मक फ़िल्टर्स के लिए लेटेंसी कम कर सकती है। दस्तावेज़ किसी एक को सार्वभौमिक रूप से सही बताने के बजाय दोनों मोड के परीक्षण की सिफारिश करते हैं; सर्वोत्तम विकल्प आपके डेटा वितरण और क्वेरी पैटर्न पर निर्भर करता है।