البحث عن الوثائق حسب التشابه الدلالي¶
GET /documents/search/¶
Initiate a search operation with a query text of up to 400 words and receive the most semantically similar responses from the stored knowledge. For question-answering, convert your question into an ideal answer and submit it to receive similar real answers.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
q |
query | string | Up to 400 words sentence for which you wish to find semantically similar chunks of knowledge. | |
n |
query | integer | Number of semantically similar chunks of text to return. Use 'n=3' for up to 5, and 'n=10' for more information. If you do not receive enough information, consider trying again with a larger 'n' value. | |
from |
query | string | Start of the time range for documents to be searched, in ISO 8601 format. | |
to |
query | string | End of the time range for documents to be searched, in ISO 8601 format. |
Responses
200— Successful retrieval of documents400— Bad request401— Unauthorized404— Not found500— Internal server error
طلبات مثال¶
curl -X GET
"https://api.rememberizer.ai/api/v1/documents/search/?q=كيف%20أدمج%20Rememberizer%20مع%20تطبيقات%20مخصصة&n=5&from=2023-01-01T00:00:00Z&to=2023-12-31T23:59:59Z"
-H "Authorization: Bearer YOUR_JWT_TOKEN"
Info
استبدل YOUR_JWT_TOKEN برمز JWT الفعلي الخاص بك.
const searchDocuments = async (query, numResults = 5, from = null, to = null) => {
const url = new URL('https://api.rememberizer.ai/api/v1/documents/search/');
url.searchParams.append('q', query);
url.searchParams.append('n', numResults);
if (from) {
url.searchParams.append('from', from);
}
if (to) {
url.searchParams.append('to', to);
}
const response = await fetch(url.toString(), {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_JWT_TOKEN'
}
});
const data = await response.json();
console.log(data);
};
searchDocuments('كيف أدمج Rememberizer مع تطبيقات مخصصة', 5);
Info
استبدل YOUR_JWT_TOKEN برمز JWT الفعلي الخاص بك.
import requests
def search_documents(query, num_results=5, from_date=None, to_date=None):
headers = {
"Authorization": "Bearer YOUR_JWT_TOKEN"
}
params = {
"q": query,
"n": num_results
}
if from_date:
params["from"] = from_date
if to_date:
params["to"] = to_date
response = requests.get(
"https://api.rememberizer.ai/api/v1/documents/search/",
headers=headers,
params=params
)
data = response.json()
print(data)
search_documents("كيف أدمج Rememberizer مع تطبيقات مخصصة", 5)
Info
استبدل YOUR_JWT_TOKEN برمز JWT الفعلي الخاص بك.
require 'net/http'
require 'uri'
require 'json'
def search_documents(query, num_results=5, from_date=nil, to_date=nil)
uri = URI('https://api.rememberizer.ai/api/v1/documents/search/')
params = {
q: query,
n: num_results
}
params[:from] = from_date if from_date
params[:to] = to_date if to_date
uri.query = URI.encode_www_form(params)
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer YOUR_JWT_TOKEN'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.request(request)
data = JSON.parse(response.body)
puts data
end
search_documents("كيف أدمج Rememberizer مع تطبيقات مخصصة", 5)
Info
استبدل YOUR_JWT_TOKEN برمز JWT الفعلي الخاص بك.
معلمات الاستعلام¶
| المعلمة | النوع | الوصف |
|---|---|---|
| q | سلسلة | مطلوب. نص استعلام البحث (حتى 400 كلمة). |
| n | عدد صحيح | عدد النتائج المراد إرجاعها. الافتراضي: 3. استخدم قيمًا أعلى (مثل 10) للحصول على نتائج أكثر شمولاً. |
| from | سلسلة | بداية نطاق الوقت للوثائق المراد البحث عنها، بتنسيق ISO 8601. |
| to | سلسلة | نهاية نطاق الوقت للوثائق المراد البحث عنها، بتنسيق ISO 8601. |
| prev_chunks | عدد صحيح | عدد الأجزاء السابقة التي يجب تضمينها للسياق. الافتراضي: 2. |
| next_chunks | عدد صحيح | عدد الأجزاء التالية التي يجب تضمينها للسياق. الافتراضي: 2. |
تنسيق الاستجابة¶
{
"data_sources": [
{
"name": "Google Drive",
"documents": 3
},
{
"name": "Slack",
"documents": 2
}
],
"matched_chunks": [
{
"document": {
"id": 12345,
"document_id": "1aBcD2efGhIjK3lMnOpQrStUvWxYz",
"name": "وثائق واجهة برمجة تطبيقات Rememberizer.pdf",
"type": "application/pdf",
"path": "/Documents/Rememberizer/API Documentation.pdf",
"url": "https://drive.google.com/file/d/1aBcD2efGhIjK3lMnOpQrStUvWxYz/view",
"size": 250000,
"created_time": "2023-05-10T14:30:00Z",
"modified_time": "2023-06-15T09:45:00Z",
"indexed_on": "2023-06-15T10:30:00Z",
"integration": {
"id": 101,
"integration_type": "google_drive"
}
},
"matched_content": "لدمج Rememberizer مع التطبيقات المخصصة، يمكنك استخدام تدفق مصادقة OAuth2 لتفويض تطبيقك للوصول إلى بيانات Rememberizer الخاصة بالمستخدم. بمجرد التفويض، يمكن لتطبيقك استخدام واجهات برمجة تطبيقات Rememberizer للبحث عن الوثائق، واسترجاع المحتوى، والمزيد.",
"distance": 0.123
},
// ... المزيد من الأجزاء المتطابقة
],
"message": "تمت عملية البحث بنجاح",
"code": "success"
}
نصائح تحسين البحث¶
للإجابة على الأسئلة¶
عند البحث عن إجابة لسؤال، حاول صياغة استفسارك كما لو كان إجابة مثالية. على سبيل المثال:
بدلاً من: "ما هو تضمين المتجهات؟" حاول: "تضمين المتجهات هو تقنية تحول النص إلى متجهات عددية في فضاء عالي الأبعاد."
Info
لفهم أعمق لكيفية عمل تضمينات المتجهات ولماذا تعتبر هذه الطريقة في البحث فعالة، انظر ما هي تضمينات المتجهات وقواعد بيانات المتجهات؟
ضبط عدد النتائج¶
- ابدأ بـ
n=3للحصول على نتائج سريعة وعالية الصلة - زد إلى
n=10أو أكثر للحصول على معلومات أكثر شمولاً - إذا كانت نتائج البحث غير كافية، حاول زيادة معلمة
n
تصفية قائمة على الوقت¶
استخدم معلمات from و to للتركيز على الوثائق من فترات زمنية محددة:
- وثائق حديثة: قم بتعيين
fromإلى تاريخ حديث - تحليل تاريخي: حدد نطاق تاريخي معين
- استبعاد المعلومات القديمة: قم بتعيين تاريخ
toمناسب
العمليات الجماعية¶
للتعامل بكفاءة مع كميات كبيرة من استعلامات البحث، يدعم Rememberizer العمليات الجماعية لتحسين الأداء وتقليل عبء استدعاءات واجهة برمجة التطبيقات.
البحث الجماعي¶
import requests
import time
import json
from concurrent.futures import ThreadPoolExecutor
def batch_search_documents(queries, num_results=5, batch_size=10):
"""
إجراء عمليات بحث جماعية مع استعلامات متعددة
Args:
queries: قائمة من سلاسل استعلام البحث
num_results: عدد النتائج التي يجب إرجاعها لكل استعلام
batch_size: عدد الاستعلامات التي يجب معالجتها بالتوازي
Returns:
قائمة بنتائج البحث لكل استعلام
"""
headers = {
"Authorization": "Bearer YOUR_JWT_TOKEN",
"Content-Type": "application/json"
}
results = []
# معالجة الاستعلامات في دفعات
for i in range(0, len(queries), batch_size):
batch = queries[i:i+batch_size]
# إنشاء مجموعة خيوط لإرسال الطلبات بالتوازي
with ThreadPoolExecutor(max_workers=batch_size) as executor:
futures = []
for query in batch:
params = {
"q": query,
"n": num_results
}
future = executor.submit(
requests.get,
"https://api.rememberizer.ai/api/v1/documents/search/",
headers=headers,
params=params
)
futures.append(future)
# جمع النتائج عند الانتهاء
for future in futures:
response = future.result()
results.append(response.json())
# تحديد المعدل - التوقف بين الدفعات لتجنب تقييد واجهة برمجة التطبيقات
if i + batch_size < len(queries):
time.sleep(1)
return results
# مثال على الاستخدام
queries = [
"كيفية استخدام OAuth مع Rememberizer",
"خيارات تكوين قاعدة بيانات المتجهات",
"أفضل الممارسات للبحث الدلالي",
# أضف المزيد من الاستعلامات حسب الحاجة
]
results = batch_search_documents(queries, num_results=3, batch_size=5)
/**
* إجراء عمليات بحث جماعية مع استعلامات متعددة
*
* @param {string[]} queries - قائمة بسلاسل استعلام البحث
* @param {number} numResults - عدد النتائج التي يجب إرجاعها لكل استعلام
* @param {number} batchSize - عدد الاستعلامات التي يجب معالجتها بالتوازي
* @param {number} delayBetweenBatches - مللي ثانية للانتظار بين المجموعات
* @returns {Promise<Array>} - قائمة بنتائج البحث لكل استعلام
*/
async function batchSearchDocuments(queries, numResults = 5, batchSize = 10, delayBetweenBatches = 1000) {
const results = [];
// معالجة الاستعلامات في مجموعات
for (let i = 0; i < queries.length; i += batchSize) {
const batch = queries.slice(i, i + batchSize);
// إنشاء مصفوفة من الوعود للطلبات المتزامنة
const batchPromises = batch.map(query => {
const url = new URL('https://api.rememberizer.ai/api/v1/documents/search/');
url.searchParams.append('q', query);
url.searchParams.append('n', numResults);
return fetch(url.toString(), {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_JWT_TOKEN'
}
}).then(response => response.json());
});
// الانتظار حتى تكتمل جميع الطلبات في المجموعة
const batchResults = await Promise.all(batchPromises);
results.push(...batchResults);
// تحديد معدل الطلبات - التوقف بين المجموعات لتجنب تقييد واجهة برمجة التطبيقات
if (i + batchSize < queries.length) {
await new Promise(resolve => setTimeout(resolve, delayBetweenBatches));
}
}
return results;
}
// مثال على الاستخدام
const queries = [
"كيفية استخدام OAuth مع Rememberizer",
"خيارات تكوين قاعدة بيانات المتجهات",
"أفضل الممارسات للبحث الدلالي",
// أضف المزيد من الاستعلامات حسب الحاجة
];
batchSearchDocuments(queries, 3, 5)
.then(results => console.log(results))
.catch(error => console.error('خطأ في البحث الجماعي:', error));
require 'net/http'
require 'uri'
require 'json'
require 'concurrent'
# إجراء عمليات بحث جماعية باستخدام استعلامات متعددة
#
# @param queries [Array<String>] قائمة سلاسل استعلام البحث
# @param num_results [Integer] عدد النتائج التي يجب إرجاعها لكل استعلام
# @param batch_size [Integer] عدد الاستعلامات لمعالجتها بالتوازي
# @param delay_between_batches [Float] ثوانٍ للانتظار بين الدفعات
# @return [Array] قائمة نتائج البحث لكل استعلام
def batch_search_documents(queries, num_results = 5, batch_size = 10, delay_between_batches = 1.0)
results = []
# معالجة الاستعلامات في دفعات
queries.each_slice(batch_size).with_index do |batch, batch_index|
# إنشاء مجموعة خيوط للطلبات المتزامنة
pool = Concurrent::FixedThreadPool.new(batch_size)
futures = []
batch.each do |query|
futures << Concurrent::Future.execute(executor: pool) do
uri = URI('https://api.rememberizer.ai/api/v1/documents/search/')
params = {
q: query,
n: num_results
}
uri.query = URI.encode_www_form(params)
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer YOUR_JWT_TOKEN'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.request(request)
JSON.parse(response.body)
end
end
# جمع النتائج من جميع الخيوط
batch_results = futures.map(&:value)
results.concat(batch_results)
# تحديد المعدل - توقف بين الدفعات لتجنب تقييد واجهة برمجة التطبيقات
if batch_index < (queries.length / batch_size.to_f).ceil - 1
sleep(delay_between_batches)
end
end
pool.shutdown
results
end
# مثال على الاستخدام
queries = [
"كيفية استخدام OAuth مع Rememberizer",
"خيارات تكوين قاعدة بيانات المتجهات",
"أفضل الممارسات للبحث الدلالي",
# أضف المزيد من الاستفسارات حسب الحاجة
]
results = batch_search_documents(queries, 3, 5)
puts results
اعتبارات الأداء¶
عند تنفيذ عمليات الدفعات، ضع في اعتبارك هذه الممارسات الجيدة:
-
حجم الدفعة الأمثل: ابدأ بأحجام دفعات تتراوح بين 5-10 استفسارات واضبطها بناءً على خصائص أداء تطبيقك.
-
تحديد المعدل: قم بتضمين تأخيرات بين الدفعات لمنع تقليل سرعة واجهة برمجة التطبيقات. نقطة انطلاق جيدة هي 1 ثانية بين الدفعات.
-
معالجة الأخطاء: نفذ معالجة أخطاء قوية لإدارة الطلبات الفاشلة ضمن الدفعات.
-
إدارة الموارد: راقب استخدام الموارد على جانب العميل، خاصة مع أحجام الدفعات الكبيرة، لمنع استهلاك الذاكرة بشكل مفرط.
-
معالجة الاستجابة: قم بمعالجة نتائج الدفعة بشكل غير متزامن عند الإمكان لتحسين تجربة المستخدم.
بالنسبة للتطبيقات ذات الحجم الكبير، ضع في اعتبارك تنفيذ نظام قائمة لإدارة أعداد كبيرة من طلبات البحث بكفاءة.
توفر هذه النقطة واجهة قوية للبحث الدلالي عبر قاعدة معرفتك بالكامل. تستخدم تضمينات المتجهات للعثور على المحتوى بناءً على المعنى بدلاً من المطابقات الدقيقة للكلمات الرئيسية.