جستجوی اسناد

با استفاده از این endpoint می‌توان در بین اسناد موجود در یک مجموعه داده جستجو کرد.

CURL
PHP
CURL
curl --location --request GET 'https://api.negare.io/v1/search' \
--header 'Content-Type: application/json' \
--header 'API-KEY: <TOKEN>' \
--data-raw '{
"query": "شلوار",
"inFields": ["title", "description"],
"returnFields": ["id", "title", "description", "price"],
"page": 1,
"perPage": 10
}'
PHP
$params = [
"query" => "شلوار",
"inFields" => ["title", "description"],
"returnFields" => ["id", "title", "description", "price"],
"page" => 1,
"perPage" => 10
];
// search for documents
$result = $searchInstance->search($params);
print_r($result);

کلید query حاوی عبارت مورد نظر برای جستجو است،

کلید inFields حاوی فیلدهایی است که می‌خواهیم جستجو در آن فیلدها انجام شود،

فیلدهایی که میخواهید در نتایج برگردانده شوند در کلید returnFields قرار می‌گیرند،

و فیلدهای page و perPage نیز برای صفحه بندی نتایج مورد استفاده قرار می گیرد.

برای وزن‌دهی به فیلدهای مختلف، بجای آرایه می‌توان از یک آبجکت بصورت زیر استفاده کرد.

"inFields": {"title": 3, "description": 1}

با ارسال این درخواست اطلاعات زیر بازگردانده می‌شود:

Response
Response
{
"results": [...],
"page": 1,
"perPage": 10,
"sortBy": {
"_score": "desc"
},
"total": 67,
"took": 7.99
}

اسناد برگردانده شده در کلید results قرار می‌گیرند،

کلید sortBy مشخص کننده نحوه مرتب‌سازی اسناد است،

کلید total مشخص کننده تعداد نتایج منطبق با عبارت جستجو شده است،

و کلید took زمان پاسخ‌دهی را به واحد میلی ثانیه مشخص می کند.

نتایج بصورت پیشفرض بر اساس میزان منطبق بودن با عبارت جستجو مرتب می شوند. یعنی منطبق‌ترین نتیجه بالاتر قرار می‌گیرد.

فیلترها:

بعضی مواقع انتظار می‌رود که بتوان از فیلدهای دیگر نیز برای جستجو استفاده کرد. مثلا عملیات جستجو را بین تمامی اسنادی که در یک دسته‌بندی خاص قرار دارند انجام داد. یا فقط محصولاتی را برگرداند که در یک بازه قیمتی قرار دارند. در چنین مواقعی می‌توان از فیلترها استفاده کرد. فیلترها در داخل کلید where در هنگام درخواست جستجو قرار می‌گیرند.

این فیلترها به ۵ دسته تقسیم بندی می‌شوند که در ادامه شرح داده می‌شوند.

۱. فیلتر مساوی بودن:

این فیلتر زمانی استفاده می‌شود که نیاز داریم یک فیلد بخصوص دارای مقدار موردنظر باشد. در مثال زیر تمامی اسنادی برگردانده می‌شوند که فیلد published آنها مساوی با مقدار 1 است.

CURL
PHP
CURL
curl --location --request GET 'https://api.negare.io/v1/search' \
--header 'Content-Type: application/json' \
--header 'API-KEY: <TOKEN>' \
--data-raw '{
"query": "شلوار",
"inFields": ["title", "description"],
"where": {
"published": {
"$eq": "1"
}
},
"returnFields": ["id", "title", "description", "price"],
"page": 1,
"perPage": 10
}'
PHP
$params = [
"query" => "شلوار",
"inFields" => ["title", "description"],
"where" => [
"published" => [
"$eq" => "1"
]
],
"returnFields" => ["id", "title", "description", "price"],
"page" => 1,
"perPage" => 10
];
// search for documents
$result = $searchInstance->search($params);
print_r($result);

۲. فیلتر شامل بودن:

این فیلتر زمانی استفاده میشود که نیاز داریم مقدار یک فیلد بخصوص داخل لیست مورد نظر باشد. در مثال زیر تمامی اسنادی که در یکی از دسته های sport، game و tech قرار دارند یعنی category آنها در لیست مشخصی قرار دارند برگردانده می‌شوند.

CURL
PHP
CURL
curl --location --request GET 'https://api.negare.io/v1/search' \
--header 'Content-Type: application/json' \
--header 'API-KEY: <TOKEN>' \
--data-raw '{
"query": "شلوار",
"inFields": ["title", "description"],
"where": {
"category": {
"$in": ["sport", "game", "tech"]
}
},
"returnFields": ["id", "title", "description", "price"],
"page": 1,
"perPage": 10
}'
PHP
$params = [
"query" => "شلوار",
"inFields" => ["title", "description"],
"where" => [
"category" => [
"$in" => ["sport", "game", "tech"]
]
],
"returnFields" => ["id", "title", "description", "price"],
"page" => 1,
"perPage" => 10
];
// search for documents
$result = $searchInstance->search($params);
print_r($result);

۳. فیلتر کوچکتر بودن:

این فیلتر زمانی استفاده می شود که نیاز داریم مقدار یک فیلد بخصوصی کوچکتر از مقدار مورد نظر باشد. در مثال زیر تمامی محصولاتی که قیمت آنها کمتر از ۱۰۰ هزار تومان است یعنی price آنها کمتر از ۱۰۰ هزار تومان است برگردانده می‌شوند.

CURL
PHP
CURL
curl --location --request GET 'https://api.negare.io/v1/search' \
--header 'Content-Type: application/json' \
--header 'API-KEY: <TOKEN>' \
--data-raw '{
"query": "شلوار",
"inFields": ["title", "description"],
"where": {
"price": {
"$lt": 100000
}
},
"returnFields": ["id", "title", "description", "price"],
"page": 1,
"perPage": 10
}'
PHP
$params = [
"query" => "شلوار",
"inFields" => ["title", "description"],
"where" => [
"price" => [
"$lt" => 100000
]
],
"returnFields" => ["id", "title", "description", "price"],
"page" => 1,
"perPage" => 10
];
// search for documents
$result = $searchInstance->search($params);
print_r($result);

۴. فیلتر بزرگتر بودن:

این فیلتر زمانی استفاده می شود که نیاز داریم مقدار یک فیلد بخصوصی بزرگتر از مقدار مورد نظر باشد. در مثال زیر تمامی محصولاتی که قیمت آنها بیشتر از ۱۰۰ هزار تومان است یعنی price آنها بیشتر از ۱۰۰ هزار تومان است برگردانده می‌شوند.

CURL
PHP
CURL
curl --location --request GET 'https://api.negare.io/v1/search' \
--header 'Content-Type: application/json' \
--header 'API-KEY: <TOKEN>' \
--data-raw '{
"query": "شلوار",
"inFields": ["title", "description"],
"where": {
"price": {
"$gt": 100000
}
},
"returnFields": ["id", "title", "description", "price"],
"page": 1,
"perPage": 10
}'
PHP
$params = [
"query" => "شلوار",
"inFields" => ["title", "description"],
"where" => [
"price" => [
"$gt" => 100000
]
],
"returnFields" => ["id", "title", "description", "price"],
"page" => 1,
"perPage" => 10
];
// search for documents
$result = $searchInstance->search($params);
print_r($result);

۵. فیلتر بین دو مقدار بودن:

این فیلتر زمانی استفاده می شود که نیاز داریم مقدار فیلد بخصوصی بین دو مقدار مورد نظر باشد. در مثال زیر تمامی محصولاتی که قیمت آنها بین ۵۰ و ۱۰۰ هزار تومان است برگردانده می شوند.

CURL
PHP
CURL
curl --location --request GET 'https://api.negare.io/v1/search' \
--header 'Content-Type: application/json' \
--header 'API-KEY: <TOKEN>' \
--data-raw '{
"query": "شلوار",
"inFields": ["title", "description"],
"where": {
"price": {
"$bw": [50000, 100000]
}
},
"returnFields": ["id", "title", "description", "price"],
"page": 1,
"perPage": 10
}'
PHP
$params = [
"query" => "شلوار",
"inFields" => ["title", "description"],
"where" => [
"price" => [
"$bw" => [50000, 100000]
]
],
"returnFields" => ["id", "title", "description", "price"],
"page" => 1,
"perPage" => 10
];
// search for documents
$result = $searchInstance->search($params);
print_r($result);

این فیلترها را می‌توان بصورت همزمان نیز استفاده کرد.