本页介绍了如何应用自然语言理解技术自动为搜索查询创建过滤条件,从而提高返回结果的质量。
您可以将此功能与连接到结构化数据存储区的搜索应用搭配使用。
自然语言查询理解简介
如果您有一个包含结构化数据的通用搜索应用,则可以将用户的自然语言查询重新格式化为过滤查询。与在查询字符串中搜索字词相比,这种方法可以获得更优质的搜索结果。
与编写自己的过滤表达式相比,使用自然语言查询理解功能更简单、更灵活。如需了解如何编写过滤表达式,请参阅过滤结构化或非结构化数据的通用搜索。
最好通过示例来解释此功能:
示例:从查询中提取字段显示了从查询中提取的字段过滤条件。
示例:使用地理位置过滤条件包含地理位置过滤条件的特殊情况。
示例:从查询中提取字段
下面通过搜索酒店的示例来介绍此自然语言查询理解功能。
假设您向酒店网站的结构化数据存储区发出了以下查询:“帮我找一家至少四星级、每晚费用低于 300 美元、允许携带狗狗入住且提供免费 Wi-Fi 的家庭友好型酒店。”
如果不具备自然语言查询理解功能,搜索应用会查找包含查询中字词的文档。
借助自然语言查询理解和适当结构化的数据,系统可以将查询中的部分自然语言替换为过滤条件,从而提高搜索效率。如果结构化数据包含 star_rating
(数字)、price
(数字)和 amenities
(字符串)字段,则可以将查询重写为以下过滤器和一个残留查询:
从自然语言查询中提取的过滤条件:
{ "star_rating": ≥4, "price": ≤300, "amenities": "Wifi", "Pets Allowed" }
在提取过滤条件后重新制定的残留查询:
family-friendly
示例:使用地理位置过滤条件
此示例与上一个示例类似,但它包含地理位置过滤条件,这是一种特殊的提取过滤条件。Vertex AI Search 能够识别查询中的地点,并为这些地点创建相邻过滤条件。
假设用户向某个州级商家网站发出以下查询:“帮我找一家位于旧金山、至少 4 星级且时尚别致的酒店。”
借助自然语言查询理解和地理位置过滤条件,系统会将搜索重新表述为过滤条件和残留查询:
从自然语言查询中提取的过滤条件:至少 4 星级,且位于旧金山 10 公里半径范围内:
{ "star_rating": ≥4, "location": GEO_DISTANCE(\"San Francisco, CA\", 10000) }
在此示例中,
GEO_DISTANCE
是地址,但在其他查询中,它可能写为经纬度,即使原始查询包含地址也是如此。在提取过滤条件后重新制定的残留查询:
chic and stylish in San Francisco
虽然已添加地理位置过滤条件,但地点名称仍会保留在剩余查询中。这与其他过滤条件(例如
star_rating
)不同。
限制
自然语言查询理解功能存在以下限制:
自然语言查询理解功能无法应用于混合搜索应用。如果您尝试将自然语言查询理解功能与混合搜索应用搭配使用,则会收到错误消息。
自然语言查询理解功能仅适用于使用结构化数据存储区的通用搜索应用。
使用自然语言查询理解功能会增加延迟时间,因此如果延迟时间是一个问题,您可以选择不使用该功能。
对于地理定位,必须明确描述地理位置。您不能使用“我附近”或“家”等地点。
地理定位的半径为 10 公里,不可配置。
准备工作
在开始使用自然语言查询理解功能之前,您必须为与您计划使用的应用关联的结构化数据存储区启用该功能。
如需启用自然语言查询理解功能,请按以下步骤操作:
找到您的数据存储区 ID。如果您已拥有数据存储 ID,请跳至下一步。
在 Google Cloud 控制台中,前往 Agent Builder 页面,然后在导航菜单中点击数据存储区。
点击您的数据存储区的名称。
在数据存储区的数据页面上,获取数据存储区 ID。
运行以下 curl 命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project:
PROJECT_ID " \ "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID /locations/global/collections/default_collection/dataStores/DATA_STORE_ID ?update_mask=natural_language_query_understanding_config.mode" \ -d '{ "naturalLanguageQueryUnderstandingConfig": { "mode": "ENABLED" } }'替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。DATA_STORE_ID
:Vertex AI Search 数据存储区的 ID。
命令和响应示例
curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H "X-Goog-User-Project: my-project-123" "https://discoveryengine.googleapis.com/v1beta/projects/my-project-123/locations/global/collections/default_collection/dataStores/my-data-store?update_mask=natural_language_query_understanding_config.mode" -d '{ "naturalLanguageQueryUnderstandingConfig": { "mode": "ENABLED" } }'
{ "name": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store", "displayName": "test_data_store", "industryVertical": "GENERIC", "createTime": "2024-07-10T18:50:01.673414Z", "solutionTypes": [ "SOLUTION_TYPE_SEARCH" ], "defaultSchemaId": "default_schema", "documentProcessingConfig": { "name": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/documentProcessingConfig", "defaultParsingConfig": { "digitalParsingConfig": {} } }, "servingConfigDataStore": {}, "naturalLanguageQueryUnderstandingConfig": { "mode": "ENABLED" } }对每个数据存储区重复执行第 1 步和第 2 步。
等待大约 24 小时。
如果您在数据存储区准备就绪之前尝试使用自然语言查询理解功能,则您获得的响应与将
filterExtractionCondition
设置为DISABLED
时获得的响应相同。
搜索,将自然语言查询转换为过滤条件
如需使用自然语言查询,并获取针对自然语言查询进行了优化的结果,请执行以下操作:
运行以下 curl 命令,该命令会调用
search
方法:curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1beta/projects/
PROJECT_ID /locations/global/collections/default_collection/engines/APP_ID /servingConfigs/default_search:search" \ -d '{ "query": "QUERY ", "naturalLanguageQueryUnderstandingSpec": { "filterExtractionCondition": "ENABLED" } }'替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。APP_ID
:您要查询的 Vertex AI Search 应用的 ID。应用必须与包含结构化数据的数据存储区相关联。该应用不能是混合搜索应用。QUERY
:查询是用自然语言编写的。
命令和结果示例
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" "https://discoveryengine.googleapis.com/v1beta/projects/123456 /locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:search" -d '{ "query": "Find me a family-friendly hotel with at least four stars that costs less than 300 a night, lets me bring my dog, and has free Wi-Fi.", "naturalLanguageQueryUnderstandingSpec": { "filterExtractionCondition": "ENABLED"} }'
{ "results": [ { "id": "b2617d862", "document": { "name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/b2617d862", ... } }, { "id": "a51841841", "document": { "name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/a51841841", ... } } ], "naturalLanguageQueryUnderstandingInfo": { "extractedFilters": "(amenities: ANY(\"Pets Allowed\") AND amenities: ANY(\"Wifi\") AND star_rating: >= 4 AND price: < 300)", "rewrittenQuery": "family-friendly", "extractedFilterStructured": { "expression": { "andExpr": { "expressions": [ { "numberConstraint": { "fieldName": "star_rating", "value": 4, "comparison": "GREATER_THAN_EQUALS", } }, { "numberConstraint": { "fieldName": "price", "value": 300, "comparison": "LESS_THAN", } }, { "stringConstraint": { "fieldName": "amenities", "any": ["Pets Allowed"] } }, { "stringConstraint": { "fieldName": "amenities", "any": ["Wifi"] } }, ] }
搜索,将查询中的地理位置转换为地理位置过滤条件
如需使用自然语言查询,并获取针对自然语言查询(包括与地点的距离)进行了优化的结果,请执行以下操作:
运行以下 curl 命令,该命令会调用
search
方法:curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1beta/projects/
PROJECT_ID /locations/global/collections/default_collection/engines/APP_ID /servingConfigs/default_search:search" \ -d '{ "query": "QUERY ", "naturalLanguageQueryUnderstandingSpec": { "filterExtractionCondition": "ENABLED", "geoSearchQueryDetectionFieldNames": ["GEO_FIELD_NAME_1 ", "GEO_FIELD_NAME_N "]" } }'替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。APP_ID
:您要查询的 Vertex AI Search 应用的 ID。应用必须与包含结构化数据的数据存储区相关联。该应用不能是混合搜索应用。QUERY
:查询是用自然语言编写的。GEO_FIELD_NAME_1, GEO_FIELD_NAME_N
:类型为geolocation
的值列表。如果值类型不是geolocation
,则系统会忽略此字段。
命令和结果示例
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" "https://discoveryengine.googleapis.com/v1beta/projects/123456 /locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:search" -d '{ "query": "Find me a chic and stylish hotel with at least 4 stars that is in San Francisco.", "naturalLanguageQueryUnderstandingSpec": { "filterExtractionCondition": "ENABLED", "geoSearchQueryDetectionFieldNames": ["location"]} }'
{ "results": [ { "id": "b2617d862", "document": { "name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/b2617d862", ... } }, { "id": "a51841841", "document": { "name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/a51841841", ... } } ], "naturalLanguageQueryUnderstandingInfo": { "extractedFilters": "(star_rating: >= 4 AND GEO_DISTANCE("location", "San Francisco", 10000))", "rewrittenQuery": "chic and stylish", "extractedFilterStructured": { "expression": { "andExpr": { "expressions": [ { "numberConstraint": { "fieldName": "star_rating", "value": 4, "comparison": "GREATER_THAN_EQUALS", } }, { "geolocationConstraint": { "fieldName": "location", "address": "San Francisco", "radius_in_meters": 10000, } }, ] }