«جستجوی نوشتاری» (جدید) اطلاعات مربوط به مجموعهای از مکانها را براساس رشتهای (برای مثال، «پیتزا در تهران» یا «کفشفروشیهای اطراف اصفهان» یا «خیابان اصلی ۱۲۳») برمیگرداند. سرویس با فهرستی از مکانهای منطبق با رشته نوشتاری و هرگونه سوگیری مکانی که تنظیم شده است پاسخ میدهد.
علاوهبر پارامترهای الزامی، «جستجوی نوشتاری» (جدید) از پالایش پُرسمانها بااستفاده از پارامترهای اختیاری برای نتایج بهتر پشتیبانی میکند.
«جستجوی نوشتاری» (جدید) شبیه جستجوی اطراف (جدید) است. تفاوت اصلی بین این دو این است که «جستجوی نوشتاری (جدید)» به شما امکان میدهد رشته جستجوی دلخواهی را مشخص کنید، درحالیکه «جستجوی اطراف (جدید)» به منطقه مشخصی برای جستجو نیاز دارد.
درخواستهای «جستجوی نوشتار»
درخواست «جستجوی نوشتاری» بهصورت زیر است:
// 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 در Text Search ازطریق روش getPagination() خود که یک شیء Pagination برمیگرداند، دسترسی به صفحهبندی نتایج جستجوی نوشتاری را فراهم میکند.
از روش hasNextPage() شیء Pagination استفاده کنید تا مشخص شود آیا صفحههای بیشتری از نتایج دردسترس است یا نه. این روش مقدار بولی (درست یا نادرست) برمیگرداند.
تا زمانی که hasNextPage() مقدار درست برمیگرداند، متد 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 فقط ضروریات جستجوی نوشتاری را راهاندازی میکنند:
Place.Field.DISPLAY_NAME*
* بهجایPlace.Field.NAME(منسوخشده در نسخه ۴.۰) استفاده کنید.
Place.Field.ID
Place.Field.RESOURCE_NAME*
* حاوی نام منبع مکان به این شکل است:places/PLACE_ID.
برای دسترسی به نام نوشتاری مکان، ازDISPLAY_NAMEاستفاده کنید.برای مشاهده فهرست کامل فیلدها و SKUهای مرتبط با آنها، به فیلدهای داده مکان (جدید) مراجعه کنید.
فیلدهای زیر Text Search Pro SKU را راهاندازی میکنند:
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()را فراخوانی کنید. حداقل ردهبندی
نتایج را فقط به مواردی محدود میکند که میانگین ردهبندی کاربر آنها بیشتر از یا برابر با این حد باشد. مقادیر باید بین ۰٫۰ و ۵٫۰ (شامل این دو عدد) با افزایش ۰٫۵ باشد. برای مثال: ۰، ۰٫۵، ۱٫۰، …، ۵٫۰ شامل این دو عدد. مقادیر به نزدیکترین ۰٫۵ گرد میشوند. برای مثال، مقدار ۰٫۶ همه نتایج با ردهبندی کمتر از ۱٫۰ را حذف میکند.
برای تنظیم پارامتر حداقل ردهبندی، هنگام ساختن شیء
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 یکسان هستند، با چند استثنای قابلتوجه. برای مثال، دامنه سطح بالای کد کشور پادشاهی متحد «uk» (co.uk.) است، درحالیکه کد ISO 3166-1 آن «gb» است (ازنظر فنی برای نهاد «پادشاهی متحد بریتانیای کبیر و ایرلند شمالی»). این پارامتر میتواند بر نتایج براساس قانون ذیربط تأثیر بگذارد.
برای تنظیم پارامتر کد منطقه، هنگام ساختن شیء
SearchByTextRequest، روشsetRegionCode()را فراخوانی کنید.فیلتر کردن نوع سختگیرانه
با پارامتر نوع گنجاندن استفاده میشود. وقتی روی
trueتنظیم شود، فقط مکانهایی که با انواع مشخصشده توسط include type مطابقت داشته باشند برگردانده میشوند. وقتیfalse، پیشفرض، پاسخ میتواند حاوی مکانهایی باشد که با انواع مشخصشده مطابقت ندارند.برای تنظیم پارامتر فیلتر کردن نوع سختگیرانه، هنگام ساختن شیء
SearchByTextRequest، روشsetStrictTypeFiltering()را فراخوانی کنید.