टेक्स्ट खोज (नई सुविधा) की मदद से, किसी स्ट्रिंग के आधार पर जगहों के एक सेट के बारे में जानकारी मिलती है. उदाहरण के लिए, "न्यूयॉर्क में पिज़्ज़ा" या "ओटावा के आस-पास जूते की दुकानें" या "123 मेन स्ट्रीट". यह सेवा, टेक्स्ट स्ट्रिंग और सेट की गई किसी भी जगह के हिसाब से, मिलती-जुलती जगहों की सूची दिखाती है.
ज़रूरी पैरामीटर के अलावा, टेक्स्ट सर्च (नया) में बेहतर नतीजे पाने के लिए, वैकल्पिक पैरामीटर का इस्तेमाल करके क्वेरी को बेहतर बनाया जा सकता है.
टेक्स्ट खोज (नई सुविधा), आस-पास की जगहों के बारे में खोज (नई सुविधा) की तरह ही काम करती है. इन दोनों के बीच मुख्य अंतर यह है कि टेक्स्ट से खोजने की नई सुविधा में, खोज के लिए कोई भी स्ट्रिंग तय की जा सकती है. वहीं, आस-पास खोजने की नई सुविधा में, खोज के लिए कोई खास इलाका तय करना ज़रूरी होता है.
टेक्स्ट सर्च के अनुरोध
टेक्स्ट सर्च का अनुरोध इस फ़ॉर्म में होता है:
// 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ऑब्जेक्ट बनाने के लिए,SearchByTextRequest.Builderका इस्तेमाल करें.टेक्स्ट क्वेरी स्ट्रिंग को "Spicy Vegetarian Food" पर सेट करें.
नतीजे की जगहों की ज़्यादा से ज़्यादा संख्या को 10 पर सेट करें. डिफ़ॉल्ट और ज़्यादा से ज़्यादा वैल्यू 20 होती है.
सर्च के दायरे को अक्षांश और देशांतर के निर्देशांकों से तय किए गए आयत तक सीमित करें. इस इलाके से बाहर के किसी भी नतीजे को नहीं दिखाया जाता.
कोई
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 ऑब्जेक्ट में इन फ़ील्ड को ऐक्सेस करने के लिए, Place.getId() और Place.getName() तरीकों का इस्तेमाल किया जा सकता है.
Place ऑब्जेक्ट में डेटा ऐक्सेस करने के ज़्यादा उदाहरणों के लिए, जगह की जानकारी वाले ऑब्जेक्ट के डेटा फ़ील्ड ऐक्सेस करना लेख पढ़ें
ज़रूरी पैरामीटर
SearchByTextRequest के लिए ज़रूरी पैरामीटर ये हैं:
-
फ़ील्ड की सूची
बताएं कि जगह के डेटा फ़ील्ड में कौनसी वैल्यू दिखानी हैं. डेटा फ़ील्ड की सूची पास करें, ताकि यह तय किया जा सके कि कौनसे फ़ील्ड दिखाए जाएं.
Place.Fieldजवाब में, लौटाए गए फ़ील्ड की कोई डिफ़ॉल्ट सूची नहीं होती.फ़ील्ड की सूचियां, डिज़ाइन के लिहाज़ से सबसे सही तरीका है. इससे यह पक्का किया जा सकता है कि आपने गैर-ज़रूरी डेटा का अनुरोध न किया हो. इससे, प्रोसेसिंग में लगने वाले गैर-ज़रूरी समय और बिलिंग शुल्क से बचने में मदद मिलती है.
इनमें से एक या उससे ज़्यादा फ़ील्ड डालें:
इन फ़ील्ड से सिर्फ़ आईडी वाले SKU के लिए टेक्स्ट खोज की ज़रूरी शर्तें ट्रिगर होती हैं:
Place.Field.DISPLAY_NAME*
*Place.Field.NAME(वर्शन 4.0 में बंद कर दिया गया) के बजाय इसका इस्तेमाल करें.
Place.Field.ID
Place.Field.RESOURCE_NAME*
* इसमें जगह के संसाधन का नाम इस फ़ॉर्म में होता है:places/PLACE_ID.
जगह के टेक्स्ट नाम को ऐक्सेस करने के लिए,DISPLAY_NAMEका इस्तेमाल करें.इन फ़ील्ड से 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इन फ़ील्ड से Text Search Enterprise SKU ट्रिगर होता है:
Place.Field.CURRENT_OPENING_HOURS
Place.Field.CURRENT_SECONDARY_OPENING_HOURS
Place.Field.INTERNATIONAL_PHONE_NUMBER*
* इसका इस्तेमालPlace.Field.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.USER_RATINGS_TOTALअब काम नहीं करता.
Place.Field.WEBSITE_URIइन फ़ील्ड से Text Search Enterprise Plus SKU ट्रिगर होता है:
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
फ़ील्ड सूची पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetPlaceFields()तरीके को कॉल करें. -
टेक्स्ट क्वेरी
वह टेक्स्ट स्ट्रिंग जिसे खोजना है. उदाहरण के लिए: "रेस्टोरेंट", "123 मेन स्ट्रीट" या "सैन फ़्रांसिस्को में घूमने के लिए सबसे अच्छी जगह". यह एपीआई, इस स्ट्रिंग के आधार पर मिलते-जुलते उम्मीदवारों के नाम दिखाता है. साथ ही, नतीजों को इस आधार पर क्रम से लगाता है कि वे कितने काम के हैं.
टेक्स्ट क्वेरी पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetTextQuery()तरीके को कॉल करें.
ज़रूरी नहीं पैरामीटर
अपने अनुरोध के लिए वैकल्पिक पैरामीटर तय करने के लिए, SearchByTextRequest ऑब्जेक्ट का इस्तेमाल करें.
शामिल किए गए टाइप
नतीजों को उन जगहों तक सीमित करता है जो टेबल A में तय किए गए टाइप से मेल खाती हैं. सिर्फ़ एक टाइप तय किया जा सकता है. उदाहरण के लिए:
setIncludedType("bar")setIncludedType("pharmacy")
शामिल किए गए टाइप पैरामीटर को सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetIncludedType()तरीके को कॉल करें.लोकेशन बायस
खोजने के लिए कोई इलाका तय करता है. यह जगह, खोज के नतीजों को प्रभावित करती है. इसका मतलब है कि खोज के नतीजे, बताई गई जगह के आस-पास के इलाकों के हिसाब से दिखाए जा सकते हैं. इनमें बताई गई जगह से बाहर के नतीजे भी शामिल हो सकते हैं.
जगह के हिसाब से पाबंदी या जगह के हिसाब से प्राथमिकता तय की जा सकती है, लेकिन दोनों नहीं. जगह के हिसाब से पाबंदी लगाने का मतलब है कि नतीजे सिर्फ़ उस जगह के लिए दिखाए जाएंगे. वहीं, जगह के हिसाब से खोज के नतीजों को प्राथमिकता देने का मतलब है कि नतीजे उस जगह के लिए दिखाए जाएंगे या उसके आस-पास की जगह के लिए. हालांकि, यह ध्यान रखें कि जगह के हिसाब से खोज के नतीजों को प्राथमिकता देने की सुविधा का इस्तेमाल करने पर, नतीजे अब भी बताई गई जगह से बाहर के हो सकते हैं.
रीजन को आयताकार व्यूपोर्ट या सर्कल के तौर पर तय करें.
किसी सर्कल को उसके सेंटर पॉइंट और मीटर में दी गई त्रिज्या से तय किया जाता है. रेडियस, 0.0 और 50000.0 के बीच होना चाहिए. हालांकि, इन दोनों में से भी कोई संख्या हो सकती है. उदाहरण के लिए:
// 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();
आयत, अक्षांश-देशांतर का व्यूपोर्ट होता है. इसे दो विकर्ण विपरीत बिंदुओं के तौर पर दिखाया जाता है. लो पॉइंट, आयत के दक्षिण-पश्चिम कोने को दिखाता है. वहीं, हाई पॉइंट, आयत के उत्तर-पूर्व कोने को दिखाता है.
व्यूपोर्ट को एक बंद क्षेत्र माना जाता है. इसका मतलब है कि इसमें इसकी सीमा शामिल होती है. अक्षांश की सीमाएं -90 से 90 डिग्री के बीच होनी चाहिए. इसमें ये दोनों वैल्यू शामिल हैं. साथ ही, देशांतर की सीमाएं -180 से 180 डिग्री के बीच होनी चाहिए. इसमें ये दोनों वैल्यू शामिल हैं:
- अगर
low=highहै, तो व्यूपोर्ट में सिर्फ़ एक पॉइंट होता है. - अगर
low.longitude>high.longitudeहै, तो देशांतर की रेंज उल्टी हो जाती है. इसका मतलब है कि व्यूपोर्ट, 180 डिग्री देशांतर वाली लाइन को पार कर जाता है. - अगर
low.longitude= -180 डिग्री औरhigh.longitude= 180 डिग्री है, तो व्यूपोर्ट में सभी देशांतर शामिल होते हैं. - अगर
low.longitude= 180 डिग्री औरhigh.longitude= -180 डिग्री है, तो देशांतर की सीमा खाली होती है. - अगर
low.latitude>high.latitudeहै, तो अक्षांश की रेंज खाली होती है.
छोटी और बड़ी, दोनों वैल्यू डालना ज़रूरी है. साथ ही, दिखाए गए बॉक्स में कोई वैल्यू मौजूद होनी चाहिए. व्यूपोर्ट खाली होने पर गड़बड़ी होती है.
उदाहरण के लिए, रेक्टैंगुलर व्यूपोर्ट का टेक्स्ट खोज के अनुरोध देखें.
लोकेशन बायस पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetLocationBias()तरीके को कॉल करें.- अगर
जगह की जानकारी से जुड़ी पाबंदी
खोजने के लिए कोई इलाका तय करता है. चुने गए इलाके से बाहर के नतीजे नहीं दिखाए जाते. रीजन को रेक्टैंगल व्यूपोर्ट के तौर पर सेट करें. व्यूपोर्ट तय करने के बारे में जानकारी पाने के लिए, लोकेशन के हिसाब से खोज के नतीजे दिखाने की सुविधा के बारे में दिया गया ब्यौरा देखें.
जगह के हिसाब से पाबंदी या जगह के हिसाब से प्राथमिकता तय की जा सकती है, लेकिन दोनों नहीं. जगह के हिसाब से पाबंदी लगाने का मतलब है कि नतीजे सिर्फ़ उस जगह के होने चाहिए. वहीं, जगह के हिसाब से खोज के नतीजों में बदलाव करने का मतलब है कि नतीजे उस जगह के आस-पास के होने चाहिए, लेकिन वे उस जगह से बाहर के भी हो सकते हैं.
जगह से जुड़ी पाबंदी का पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetLocationRestriction()तरीके को कॉल करें.-
नतीजों की ज़्यादा से ज़्यादा संख्या
जगह के ज़्यादा से ज़्यादा नतीजों की संख्या तय करता है. यह 1 और 20 (डिफ़ॉल्ट) के बीच होना चाहिए.
नतीजों की ज़्यादा से ज़्यादा संख्या तय करने वाले पैरामीटर को सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetMaxResultCount()तरीके को कॉल करें. कम से कम रेटिंग
नतीजों को सिर्फ़ उन जगहों तक सीमित करता है जिनकी औसत उपयोगकर्ता रेटिंग, इस सीमा से ज़्यादा या इसके बराबर है. वैल्यू, 0.0 और 5.0 के बीच होनी चाहिए. हालांकि, इन दोनों में से भी कोई संख्या हो सकती है. साथ ही, वैल्यू में 0.5 का अंतर होना चाहिए. उदाहरण के लिए: 0, 0.5, 1.0, ... , 5.0. वैल्यू को निकटतम 0.5 तक पूर्णांक बनाया जाता है. उदाहरण के लिए, 0.6 की वैल्यू से, एक से कम रेटिंग वाले सभी नतीजे हट जाते हैं.
कम से कम रेटिंग पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetMinRating()तरीके को कॉल करें.अभी खोलें
अगर
true, तो सिर्फ़ उन जगहों की जानकारी दिखाओ जो क्वेरी भेजे जाने के समय कारोबार के लिए खुली हों. अगरfalseहै, तो खुले होने के स्टेटस के बावजूद सभी कारोबारों की जानकारी दिखाएं. अगर आपने इस पैरामीटर कोfalseपर सेट किया है, तो उन जगहों के नतीजे दिखाए जाते हैं जिनके खुलने का समय Google Places डेटाबेस में नहीं दिया गया है.'अभी खुला है' पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetOpenNow()तरीके को कॉल करें.-
किराये के लेवल
डिफ़ॉल्ट रूप से, नतीजों में ऐसी जगहें शामिल होती हैं जो सभी कीमत लेवल पर सेवाएं देती हैं. नतीजों को सिर्फ़ खास कीमत वाले लेवल की जगहों तक सीमित करने के लिए, पूर्णांक वैल्यू की एक सूची पास की जा सकती है. यह सूची, उन जगहों के लिए कीमत के लेवल से मेल खाती है जिनके नतीजे आपको दिखाने हैं:
1- यहां किफ़ायती सेवाएं मिलती हैं.2- इस जगह पर, सामान्य कीमत पर सेवाएं मिलती हैं.3- इस जगह पर सेवाएं महंगी हैं.4- यह जगह बहुत महंगी सेवाएं देती है.
कीमत के लेवल का पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetPriceLevels()तरीके को कॉल करें. रैंक की प्राथमिकता
इससे यह तय होता है कि क्वेरी के टाइप के आधार पर, जवाब में नतीजों को कैसे रैंक किया जाता है:
- "न्यूयॉर्क शहर के रेस्टोरेंट" जैसी कैटगरी वाली क्वेरी के लिए,
SearchByTextRequest.RankPreference.RELEVANCE(खोज के नतीजों को क्वेरी के हिसाब से रैंक करना) डिफ़ॉल्ट रूप से चालू होता है. रैंक की प्राथमिकता कोSearchByTextRequest.RankPreference.RELEVANCEयाSearchByTextRequest.RankPreference.DISTANCE(दूरी के हिसाब से नतीजों को रैंक करें) पर सेट किया जा सकता है. - "माउंटेन व्यू, कैलिफ़ोर्निया" जैसी क्वेरी के लिए, हमारा सुझाव है कि रैंक प्रेफ़रेंस पैरामीटर को सेट न करें.
रैंक की प्राथमिकता का पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetRankPreference()तरीके को कॉल करें.- "न्यूयॉर्क शहर के रेस्टोरेंट" जैसी कैटगरी वाली क्वेरी के लिए,
क्षेत्र कोड
जवाब को फ़ॉर्मैट करने के लिए इस्तेमाल किया गया क्षेत्र कोड. इसे दो वर्णों वाले CLDR कोड वैल्यू के तौर पर तय किया जाता है. इस पैरामीटर का असर, खोज नतीजों पर भी पड़ सकता है. कोई डिफ़ॉल्ट वैल्यू नहीं है.
अगर जवाब में मौजूद पते के फ़ील्ड में देश का नाम, क्षेत्र के कोड से मेल खाता है, तो पते से देश का कोड हटा दिया जाता है.
ज़्यादातर CLDR कोड, ISO 3166-1 कोड के जैसे ही होते हैं. हालांकि, कुछ मामलों में ये अलग होते हैं. उदाहरण के लिए, यूनाइटेड किंगडम का ccTLD "uk" (.co.uk) है, जबकि इसका ISO 3166-1 कोड "gb" है. तकनीकी तौर पर, यह "ग्रेट ब्रिटेन और उत्तरी आयरलैंड का यूनाइटेड किंगडम" के लिए है. लागू कानून के आधार पर, इस पैरामीटर से नतीजों पर असर पड़ सकता है.
रीजन कोड पैरामीटर सेट करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetRegionCode()तरीके को कॉल करें.टाइप के हिसाब से फ़िल्टर करने की सुविधा
इसका इस्तेमाल include टाइप पैरामीटर के साथ किया जाता है.
trueपर सेट होने पर, सिर्फ़ वे जगहें दिखाई जाती हैं जो include_type में बताए गए टाइप से मेल खाती हैं.falseडिफ़ॉल्ट वैल्यू है. इस वैल्यू के सेट होने पर, जवाब में ऐसी जगहें शामिल हो सकती हैं जो बताए गए टाइप से मेल नहीं खातीं.टाइप के हिसाब से फ़िल्टर करने के लिए,
SearchByTextRequestऑब्जेक्ट बनाते समयsetStrictTypeFiltering()तरीके को कॉल करें.