Google Places API文本搜索结果不一致问题咨询
Google Places Text Search: Why Unspecified Type Doesn't Return All Relevant Results?
首先可以明确:这不是API的bug,而是Text Search API的设计逻辑决定的结果。
为什么会出现这种差异?
Text Search的核心是根据查询词的语义和Google的地点数据优先级,返回它认为最匹配的结果。当你不指定type参数时,API会自动推断你的查询意图:
- 对于“bergamo8”这个词,API可能把它解析成和意大利城市Bergamo相关的请求(毕竟“Bergamo”是更知名的地名,“8”可能被当成输入失误或者次要后缀),所以优先返回了城市这个
locality类型的地点。 - 当你明确指定
type=lodging时,API会过滤掉所有非住宿类的结果,此时它会精准匹配到那个名为“Bergamo8”的住宿点——这时候“8”就成了名称的关键部分,不会被忽略。
怎么才能获取所有相关类型的地点?
如果想要覆盖所有可能的匹配类型,有几个可行的办法:
1. 用Place Autocomplete API先获取候选结果
Autocomplete API会返回与查询词匹配的多种类型的地点建议,你可以拿到这些建议的place_id,再调用Place Details API获取每个地点的完整信息。这种方式能捕捉到更多潜在的匹配项,包括不同类型的地点。
2. 多轮调用Text Search,指定不同类型
列出你关注的地点类型(比如lodging、locality、establishment等),分别发起Text Search请求,然后把结果合并起来(记得用place_id去重,避免重复条目)。比如你可以:
- 调用
query=bergamo8&type=lodging - 调用
query=bergamo8&type=locality - 调用
query=bergamo8&type=establishment
之后把返回的结果整合,去掉重复的地点。
3. 尝试Nearby Search(如果有位置范围)
如果你知道目标地点的大致地理位置,可以用Nearby Search API,结合name=bergamo8参数,它会在指定区域内搜索所有名称匹配的地点,不会被单一类型限制。
你的两次请求结果对比
请求1(未指定type)
<PlaceSearchResponse> <status>OK</status> <result> <name>Bergamo</name> <type>locality</type> <type>political</type> <formatted_address>Bergamo, Province of Bergamo, Italy</formatted_address> <geometry> <location> <lat>45.6982642</lat> <lng>9.6772698</lng> </location> <viewport> <southwest> <lat>45.6625158</lat> <lng>9.6205463</lng> </southwest> <northeast> <lat>45.7238489</lat> <lng>9.7136328</lng> </northeast> </viewport> </geometry> <icon> https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png </icon> <reference> CmRbAAAA8T_6nvUrkTUF85gJtkVtFdbUccfYlcxVOziiUZ_HAsWHdySDg8cdPKvQD2wMjMx2oPc17nn4R3YaQDXbKViVyxHHf1qgWVwJ3yUHGygud4hUnY9aADoHSH-8U1l3xdaNEhD_SrAbwT9WGEQIedHS67AQGhTowbrLa_4LvWMfYSekJlYzOVyj5w </reference> <id>89666d6c7fc59efec1788477617d124d59a254f9</id> <photo> <photo_reference> CmRaAAAAAFWrmgCoXKoske2yxr9a6EkTDMlL59VTQ2bJ_SWzLxGT5itDjXLegV1Geliqilz70Ve3fekX9LUa46NcdVWPCKFGw8P1XniuDx8ZSyoNhObzrFTkgOI6TajtzqaOyG8fEhCnQYNCt4A19laWACC_c4OnGhQxg1rTA9mRBcgZlN_iMt4dViX6HQ </photo_reference> <width>2560</width> <height>1536</height> <html_attribution> <a href="https://maps.google.com/maps/contrib/106100271090014989776/photos">Barbara Grassi</a> </html_attribution> </photo> <place_id>ChIJc65ivBFRgUcR0aTlC4_LL9M</place_id> </result> </PlaceSearchResponse>
请求2(指定type=lodging)
<PlaceSearchResponse> <status>OK</status> <result> <name>Bergamo8</name> <type>lodging</type> <type>point_of_interest</type> <type>establishment</type> <formatted_address> Piazza della Repubblica, 3, 24122 Bergamo BG, Italy </formatted_address> <geometry> <location> <lat>45.6979060</lat> <lng>9.6674570</lng> </location> <viewport> <southwest> <lat>45.6965483</lat> <lng>9.6660933</lng> </southwest> <northeast> <lat>45.6992480</lat> <lng>9.6687930</lng> </northeast> </viewport> </geometry> <rating>4.0</rating> <icon> https://maps.gstatic.com/mapfiles/place_api/icons/lodging-71.png </icon> <reference> CmRbAAAAciLhIMD6BUcnZrkiI3og5zkv8iufp0MXe1UJ48ZnBZgc37dyohrPK8SuBVIl9vtnMaeuqiS1rRUq1IcfoK9Y-DKQj17jsK0QttB-2Q5PICXtL23ZOFABZwPKFMCHvoGSEhC2tTX2oEUtdtvJJElkvA24GhRxoVbZjb2mIzhlLwzZYZKfvcTN3A </reference> <id>443bfff8822b1f589bffc27a4e4f9e3201e99200</id> <opening_hours> <open_now>true</open_now> </opening_hours> <photo> <photo_reference> CmRaAAAAW37hcFzSRR3TQWPggrDHh7g5nizXfCmtKuif8y-nX4_q6oQdt7GHNWe5YPOrrqcSfs_1a0opZHnFzV1QBBbh1RYNN4D41yTzM03VpGtIpamTNWY9Gyyv7oAi3p4r460SEhAAqvPQOxucRXoKwmmsTmE4GhQ3wybwAY9EmBKDd6uprFgHq_QiEA </photo_reference> <width>2048</width> <height>1335</height> <html_attribution> <a href="https://maps.google.com/maps/contrib/101851276576772600409/photos">Bergamo8</a> </html_attribution> </photo> <place_id>ChIJhfjVaxFRgUcRolpKS-72w8M</place_id> </result> </PlaceSearchResponse>
内容的提问来源于stack exchange,提问作者howach
相关产品推荐
相关产品推荐

