«جستجوی نوشتار (جدید)» اطلاعات مربوط به مجموعهای از مکانها را براساس رشتهای (برای مثال، «پیتزا در نیویورک» یا «کفشفروشیهای نزدیک اتاوا» یا «خیابان اصلی ۱۲۳») برمیگرداند. سرویس با فهرستی از مکانهای منطبق با رشته نوشتاری و هرگونه سوگیری مکانی که تنظیم شده است پاسخ میدهد.
علاوهبر پارامترهای الزامی، «جستجوی نوشتار» (جدید) از پالایش پُرسمانها بااستفاده از پارامترهای اختیاری برای نتایج بهتر پشتیبانی میکند.
«جستجوی نوشتار (جدید)» مشابه جستجوی اطراف (جدید) است. تفاوت اصلی بین این دو این است که «جستجوی نوشتار (جدید)» به شما امکان میدهد رشته جستجوی دلخواهی را مشخص کنید، درحالیکه «جستجوی اطراف (جدید)» به منطقه خاصی برای جستجو نیاز دارد.
درخواستهای «جستجوی نوشتار»
درخواست «جستجوی نوشتار» بهصورت زیر است:
// Specify the list of fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME); // Define latitude and longitude coordinates of the search area. LatLng southWest = new LatLng(37.38816277477739, -122.08813770258874); LatLng northEast = new LatLng(37.39580487866437, -122.07702325966572); // Use the builder to create a SearchByTextRequest object. final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields) .setMaxResultCount(10) .setLocationRestriction(RectangularBounds.newInstance(southWest, northEast)).build(); // Call PlacesClient.searchByText() to perform the search. // Define a response handler to process the returned List of Place objects. placesClient.searchByText(searchByTextRequest) .addOnSuccessListener(response -> { List<Place> places = response.getPlaces(); });
در این مثال، شما:
فهرست فیلد را طوری تنظیم کنید که فقط شامل
Place.Field.IDوPlace.Field.DISPLAY_NAMEباشد. یعنی اشیایPlaceدر پاسخ که نشاندهنده هر مکان منطبق هستند فقط شامل آن دو فیلد میشوند.از
SearchByTextRequest.Builderبرای ایجاد شیءSearchByTextRequestکه جستجو را تعریف میکند استفاده کنید.رشته پُرسمان نوشتاری را روی «Spicy Vegetarian Food» (غذای گیاهی تند) تنظیم کنید.
حداکثر تعداد مکانهای نتیجه را روی ۱۰ تنظیم کنید. پیشفرض و حداکثر ۲۰ است.
محدود کردن منطقه جستجو به مستطیل تعریفشده با مختصات عرض جغرافیایی و طول جغرافیایی. هیچ موردی خارج از این منطقه برگردانده نمیشود.
OnSuccessListenerرا اضافه کنید و مکانهای منطبق را از شیءSearchByTextResponseدریافت کنید.
پاسخهای «جستجوی نوشتار»
کلاس
SearchByTextResponse
پاسخ درخواست جستجو را نشان میدهد. شیء SearchByTextResponse
حاوی این موارد است:
فهرستی از اشیاء
Placeکه نشاندهنده همه مکانهای منطبق است، با یک شیءPlaceبرای هر مکان منطبق.هر شیء
Placeفقط حاوی فیلدهایی است که توسط فهرست فیلد ارسالشده در درخواست تعریف شده است.
برای مثال، در درخواست، فهرست فیلد را بهصورت زیر تعریف کردهاید:
// Specify the list of fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME);
این فهرست فیلد یعنی هر شیء Place در پاسخ فقط حاوی شناسه مکان و نام هر مکان منطبق است. سپس میتوانید از روشهای Place.getId()
و Place.getName() برای دسترسی به این فیلدها در هر شیء Place استفاده کنید.
برای مثالهای بیشتر درباره دسترسی به دادهها در شیء Place، به دسترسی به فیلدهای داده شیء «مکان» مراجعه کنید.
شمارهگذاری صفحات
کلاس SearchByTextResponse در «جستجوی نوشتار» ازطریق روش getPagination() خود که یک شیء «صفحهبندی» را برمیگرداند، دسترسی به صفحهبندی نتایج جستجوی نوشتار را فراهم میکند.
از روش hasNextPage() شیء Pagination استفاده کنید تا مشخص شود آیا صفحههای بیشتری از نتایج دردسترس است یا نه. این روش مقدار بولی (درست یا نادرست) را برمیگرداند.
وقتی hasNextPage() مقدار true را برمیگرداند، روش fetchNextPage() را برای بازیابی صفحه بعدی نتایج فراخوانی کنید.
مثال زیر نشان میدهد که چگونه میتوان بررسی کرد که آیا صفحه بعدی دردسترس است یا نه، و سپس صفحه را بار کرد.
Kotlin
val searchByTextRequest = searchByTextRequest("restaurants", Arrays.asList(Place.Field.NAME)) { maxResultCount = 10 } // using pagination object (Preferred) placesClient.searchByText(searchByTextRequest) .addOnSuccessListener {response: SearchByTextResponse -> val places = response.places val pagination = response.pagination if (pagination.hasNextPage()) { pagination.setPageSize(20) pagination.fetchNextPage() .addOnSuccessListener { nextPageResponse -> val nextPagePlaces = nextPageResponse.getPlaces() } .addOnFailureListener {// Handle error with given status code} } } .addOnFailureListener { // TODO: Handle error with given status code. exception -> { exception.printStackTrace(); } }
جاوا
SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("restaurants", Arrays.asList(Place.Field.NAME)).setMaxResultCount(10).build(); // using pagination object (Preferred) placesClient.searchByText(searchByTextRequest) .addOnSuccessListener((response) -> { List<Place> places = response.getPlaces(); Log.i(TAG, "Places result: " + places); Pagination pagination = response.getPagination(); if (pagination.hasNextPage()) { pagination.setPageSize(20); // change the page size from 10 to 20 pagination.fetchNextPage() .addOnSuccessListener((nextPageResponse) -> { List<Place> nextPagePlaces = nextPageResponse.getPlaces(); Log.i(TAG, "Next page places result: " + nextPagePlaces); }); } }) .addOnFailureListener((exception) -> { if (exception instanceof ApiException) { // Handle error with given status code } });
پارامترهای الزامی
پارامترهای الزامی برای
SearchByTextRequest
عبارتند از:
-
فهرست فیلدها
مشخص کنید کدام فیلدهای داده مکان برگردانده شود. فهرستی از مقادیر
Place.Fieldرا که فیلدهای داده را برای برگرداندن مشخص میکند ارسال کنید. هیچ فهرست پیشفرضی از فیلدهای برگرداندهشده در پاسخ وجود ندارد.فهرستهای فیلد روش طراحی خوبی برای اطمینان از این است که دادههای غیرضروری درخواست نمیکنید، که به جلوگیری از زمان پردازش غیرضروری و هزینههای صورتحساب کمک میکند.
یک یا چند فیلد زیر را مشخص کنید:
فیلدهای زیر شناسه SKU فقط شناسه Text Search Essentials را راهاندازی میکنند:
Place.Field.DISPLAY_NAME*
* بهجایPlace.Field.NAME(منسوخشده در نسخه ۴.۰) استفاده کنید.
Place.Field.ID
Place.Field.RESOURCE_NAME*
* حاوی نام منبع مکان به این شکل است:places/PLACE_ID.
ازDISPLAY_NAMEبرای دسترسی به نام نوشتاری مکان استفاده کنید.برای مشاهده فهرست کامل فیلدها و SKUهای مرتبط با آنها، به فیلدهای داده مکان (جدید) مراجعه کنید.
فیلدهای زیر شناسه کالا برای جستجوی نوشتار Pro را فعال میکنند:
Place.Field.ACCESSIBILITY_OPTIONS*
بهجایPlace.Field.WHEELCHAIR_ACCESSIBLE_ENTRANCE(منسوخشده) استفاده کنید.
Place.Field.ADDRESS_COMPONENTS
Place.Field.ADR_FORMAT_ADDRESS
Place.Field.BUSINESS_STATUS
Place.Field.FORMATTED_ADDRESS*
بهجایPlace.Field.ADDRESS(منسوخشده) استفاده کنید.
Place.Field.GOOGLE_MAPS_URI
Place.Field.ICON_BACKGROUND_COLOR
Place.Field.ICON_MASK_URL*
بهجایPlace.Field.ICON_URL(منسوخشده) استفاده کنید.
Place.Field.LOCATION*
بهجایPlace.Field.LAT_LNG(منسوخشده) استفاده کنید.
Place.Field.PHOTO_METADATAS
Place.Field.PLUS_CODE
Place.Field.PRIMARY_TYPE
Place.Field.PRIMARY_TYPE_DISPLAY_NAME
Place.Field.SHORT_FORMATTED_ADDRESS
Place.Field.SUB_DESTINATIONS
Place.Field.TYPES
Place.Field.UTC_OFFSET
Place.Field.VIEWPORTبرای مشاهده فهرست کامل فیلدها و SKUهای مرتبط با آنها، به فیلدهای داده مکان (جدید) مراجعه کنید.
فیلدهای زیر شناسه محصول سازمانی جستجوی نوشتار را راهاندازی میکنند:
Place.Field.CURRENT_OPENING_HOURS
Place.Field.CURRENT_SECONDARY_OPENING_HOURS
Place.Field.INTERNATIONAL_PHONE_NUMBER*
* بهجایPlace.Field.PHONE_NUMBERکه منسوخ شده است استفاده کنید.
Place.Field.NATIONAL_PHONE_NUMBER
Place.Field.OPENING_HOURS
Place.Field.PRICE_LEVEL
Place.Field.RATING
Place.Field.SECONDARY_OPENING_HOURS
Place.Field.USER_RATING_COUNT*
* بهجایPlace.Field.USER_RATINGS_TOTALکه منسوخ شده است استفاده کنید.
Place.Field.WEBSITE_URIبرای مشاهده فهرست کامل فیلدها و SKUهای مرتبط با آنها، به فیلدهای داده مکان (جدید) مراجعه کنید.
فیلدهای زیر شناسه محصول Text Search Enterprise Plus را فعال میکنند:
Place.Field.ALLOWS_DOGS
Place.Field.CURBSIDE_PICKUP
Place.Field.DELIVERY
Place.Field.DINE_IN
Place.Field.EDITORIAL_SUMMARY
Place.Field.EV_CHARGE_OPTIONS
Place.Field.FUEL_OPTIONS
Place.Field.GOOD_FOR_CHILDREN
Place.Field.GOOD_FOR_GROUPS
Place.Field.GOOD_FOR_WATCHING_SPORTS
Place.Field.LIVE_MUSIC
Place.Field.MENU_FOR_CHILDREN
Place.Field.OUTDOOR_SEATING
Place.Field.PARKING_OPTIONS
Place.Field.PAYMENT_OPTIONS
Place.Field.RESERVABLE
Place.Field.RESTROOM
Place.Field.REVIEWS
Place.Field.SERVES_BEER
Place.Field.SERVES_BREAKFAST
Place.Field.SERVES_BRUNCH
Place.Field.SERVES_COCKTAILS
Place.Field.SERVES_COFFEE
Place.Field.SERVES_DESSERT
Place.Field.SERVES_DINNER
Place.Field.SERVES_LUNCH
Place.Field.SERVES_VEGETARIAN_FOOD
Place.Field.SERVES_WINE
Place.Field.TAKEOUTبرای مشاهده فهرست کامل فیلدها و SKUهای مرتبط با آنها، به فیلدهای داده مکان (جدید) مراجعه کنید.
برای تنظیم پارامتر فهرست فیلد، هنگام ساختن شیء
SearchByTextRequest، روشsetPlaceFields()را فراخوانی کنید. -
پُرسمان نوشتاری
رشته نوشتاری که باید جستجو شود، برای مثال: «رستوران»، «خیابان اصلی ۱۲۳»، یا «بهترین مکان برای بازدید در سانفرانسیسکو». API مطابقتهای احتمالی را براساس این رشته برمیگرداند و نتایج را براساس ارتباط درکشده آنها مرتب میکند.
برای تنظیم پارامتر پُرسمان نوشتاری، هنگام ساختن شیء
SearchByTextRequest، روشsetTextQuery()را فراخوانی کنید.
پارامترهای اختیاری
از شیء
SearchByTextRequest
برای مشخص کردن پارامترهای اختیاری درخواستتان استفاده کنید.
نوع گنجاندهشده
نتایج را به مکانهایی محدود میکند که با نوع مشخصشده تعریفشده توسط جدول الف مطابقت دارند. فقط یک نوع را میتوان مشخص کرد. برای مثال:
setIncludedType("bar")setIncludedType("pharmacy")
برای تنظیم پارامتر نوع گنجاندهشده، هنگام ساختن شیء
SearchByTextRequest، روشsetIncludedType()را فراخوانی کنید.سوگیری مکانی
منطقهای را برای جستجو مشخص میکند. این مکان بهعنوان سوگیری عمل میکند، یعنی نتایج اطراف مکان مشخصشده میتواند برگردانده شود، ازجمله نتایج خارج از منطقه مشخصشده.
میتوانید محدودیت مکان یا سوگیری مکان را مشخص کنید، اما نه هر دو را. محدودیت مکانی را بهعنوان مشخص کردن منطقهای درنظر بگیرید که نتایج باید در آن قرار داشته باشند، و سوگیری مکانی را بهعنوان مشخص کردن منطقهای درنظر بگیرید که نتایج احتمالاً در آن یا نزدیک آن قرار خواهند داشت — بهخاطر داشته باشید که هنگام استفاده از سوگیری مکانی، نتایج همچنان میتوانند خارج از منطقه مشخصشده باشند.
منطقه را بهصورت «نمای مستطیلی» یا دایره مشخص کنید.
دایره با نقطه مرکزی و شعاع به متر تعریف میشود. شعاع باید بین ۰٫۰ و ۵۰۰۰۰٫۰ باشد. برای مثال:
// Define latitude and longitude coordinates of the center of the search area. LatLng searchCenter = new LatLng(37.38816277477739, -122.08813770258874); // Use the builder to create a SearchByTextRequest object. // Set the radius of the search area to 500.0 meters. final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields) .setMaxResultCount(10) .setLocationBias(CircularBounds.newInstance(searchCenter, 500.0)).build();
مستطیل یک نمای طول و عرض جغرافیایی است که بهصورت دو نقطه پایین و بالای مقابل هم بهصورت مورب نشان داده میشود. نقطه پایین نشاندهنده گوشه جنوب غربی مستطیل است و نقطه بالا نشاندهنده گوشه شمال شرقی مستطیل است.
ناحیه نمایش بهعنوان یک منطقه بسته درنظر گرفته میشود، یعنی مرزهای آن را شامل میشود. محدوده عرض جغرافیایی باید بین ۹۰- تا ۹۰ درجه باشد و محدوده طول جغرافیایی باید بین ۱۸۰- تا ۱۸۰ درجه باشد:
- اگر
low=high، ناحیه نمایش از آن نقطه تکی تشکیل میشود. - اگر
low.longitude>high.longitude، محدوده طول جغرافیایی معکوس میشود (نمای جغرافیایی از خط طول جغرافیایی ۱۸۰ درجه عبور میکند). - اگر
low.longitude= ۱۸۰- درجه وhigh.longitude= ۱۸۰ درجه باشد، نمای دید شامل همه طولهای جغرافیایی میشود. - اگر
low.longitude= ۱۸۰ درجه وhigh.longitude= ۱۸۰- درجه باشد، محدوده طول جغرافیایی خالی است. - اگر
low.latitude>high.latitude، محدوده عرض جغرافیایی خالی است.
هر دو مقدار کم و زیاد باید پر شوند و چارگوش نشاندادهشده نمیتواند خالی باشد. نمای خالی منجر به خطا میشود.
برای مثال، برای نمای مستطیلی، درخواستهای «جستجوی نوشتار» را ببینید.
برای تنظیم پارامتر سوگیری مکان، هنگام ساختن شیء
SearchByTextRequest، روشsetLocationBias()را فراخوانی کنید.- اگر
محدودیت مکان
منطقهای را برای جستجو مشخص میکند. نتایج خارج از منطقه مشخصشده برگردانده نمیشود. منطقه را بهعنوان «نمای مستطیلی» مشخص کنید. برای اطلاعات درباره تعریف «نمای هدف»، شرح سوگیری مکان را ببینید.
میتوانید محدودیت مکان یا سوگیری مکان را مشخص کنید، اما نه هر دو را. محدودیت مکان را بهعنوان مشخص کردن منطقهای درنظر بگیرید که نتایج باید در آن قرار داشته باشند، و سوگیری مکان را بهعنوان مشخص کردن منطقهای درنظر بگیرید که نتایج باید نزدیک آن باشند اما میتوانند خارج از آن منطقه باشند.
برای تنظیم پارامتر محدودیت مکان، هنگام ساختن شیء
SearchByTextRequest، روشsetLocationRestriction()را فراخوانی کنید.-
حداکثر تعداد نتایج
حداکثر تعداد نتایج مکان را برای برگرداندن مشخص میکند. باید بین ۱ و ۲۰ (پیشفرض) باشد.
برای تنظیم پارامتر حداکثر تعداد نتایج، هنگام ساختن شیء
SearchByTextRequest، روشsetMaxResultCount()را فراخوانی کنید. حداقل ردهبندی
نتایج را فقط به مواردی محدود میکند که میانگین ردهبندی کاربر آنها بزرگتر یا مساوی این حد باشد. مقادیر باید بین ۰٫۰ و ۵٫۰ (شامل این دو عدد) با افزایش ۰٫۵ باشد. برای مثال: 0، 0.5، 1.0، ... ، 5.0 شامل میشود. مقادیر به نزدیکترین ۰٫۵ گرد میشوند. برای مثال، مقدار ۰٫۶ همه نتایج با ردهبندی کمتر از ۱٫۰ را حذف میکند.
برای تنظیم پارامتر حداقل ردهبندی، هنگام ساختن شیء
SearchByTextRequest، روشsetMinRating()را فراخوانی کنید.اکنون باز است
اگر
true، فقط مکانهایی را برگردانید که برای کسبوکار باز هستند در زمانی که پُرسمان ارسال میشود. اگرfalse، همه کسبوکارها را صرفنظر از وضعیت باز بودن برگردانید. اگر این پارامتر را رویfalseتنظیم کنید، مکانهایی که ساعات کاری آنها در پایگاه داده Google Places مشخص نشده است برگردانده میشوند.برای تنظیم پارامتر «اکنون باز است»، هنگام ساختن شیء
SearchByTextRequest، روشsetOpenNow()را فراخوانی کنید.-
سطوح قیمت
بهطور پیشفرض، نتایج شامل مکانهایی است که خدمات را در همه سطوح قیمت ارائه میدهند. برای محدود کردن نتایج بهطوریکه فقط شامل مکانهایی با سطوح قیمت خاص باشد، میتوانید فهرستی از مقادیر عدد صحیح را که با سطوح قیمت مکانهایی که میخواهید برگردانده شود مطابقت دارد ارسال کنید:
1- این مکان خدمات ارزان ارائه میدهد.2- قیمت خدمات این مکان متوسط است.3- این مکان خدمات گرانقیمت ارائه میدهد.4- این مکان خدمات بسیار گرانی ارائه میدهد.
برای تنظیم پارامتر سطوح قیمت، هنگام ساختن شیء
SearchByTextRequest، روشsetPriceLevels()را فراخوانی کنید. اولویت رتبه
مشخص میکند که نتایج در پاسخ براساس نوع پُرسمان چگونه رتبهبندی میشوند:
- برای پُرسمانهای دستهای مثل «رستورانهای تهران»،
SearchByTextRequest.RankPreference.RELEVANCE(رتبهبندی نتایج براساس ارتباط جستجو) پیشفرض است. میتوانید اولویت رتبهبندی را رویSearchByTextRequest.RankPreference.RELEVANCEیاSearchByTextRequest.RankPreference.DISTANCE(رتبهبندی نتایج براساس فاصله) تنظیم کنید. - برای پُرسمان غیردستهبندیشدهای مثل «Mountain View, CA»، توصیه میکنیم پارامتر اولویت رتبه را تنظیمنشده رها کنید.
برای تنظیم پارامتر اولویت رتبه، هنگام ساختن شیء
SearchByTextRequest، روشsetRankPreference()را فراخوانی کنید.- برای پُرسمانهای دستهای مثل «رستورانهای تهران»،
کد منطقه
کد منطقه استفادهشده برای قالببندی پاسخ، که بهعنوان مقدار کد CLDR دو نویسهای مشخص شده است. این پارامتر همچنین میتواند تأثیر سوگیرانهای بر نتایج جستجو داشته باشد. مقدار پیشفرضی وجود ندارد.
اگر نام کشور فیلد نشانی در پاسخ با کد منطقه مطابقت داشته باشد، کد کشور از نشانی حذف میشود.
اکثر کدهای CLDR با کدهای ISO 3166-1 یکسان هستند، با چند استثنای قابلتوجه. برای مثال، ccTLD پادشاهی متحد «uk» (co.uk.) است درحالیکه کد ISO 3166-1 آن «gb» است (ازنظر فنی برای نهاد «پادشاهی متحد بریتانیای کبیر و ایرلند شمالی»). این پارامتر میتواند بر نتایج براساس قانون ذیربط تأثیر بگذارد.
برای تنظیم پارامتر کد منطقه، هنگام ساختن شیء
SearchByTextRequest، روشsetRegionCode()را فراخوانی کنید.فیلتر کردن نوع سختگیرانه
با پارامتر نوع include استفاده میشود. وقتی روی
trueتنظیم شود، فقط مکانهایی که با انواع مشخصشده توسط include type مطابقت داشته باشند برگردانده میشوند. وقتیfalse، پیشفرض، پاسخ میتواند حاوی مکانهایی باشد که با انواع مشخصشده مطابقت ندارند.برای تنظیم پارامتر فیلتر کردن نوع سختگیرانه، هنگام ساختن شیء
SearchByTextRequest، روشsetStrictTypeFiltering()را فراخوانی کنید.