文档

常见问题(FAQ)

更新时间:

系统

Q: 什么是开放搜索(OpenSearch)?

开放搜索(OpenSearch)是为您量身定制打造的针对结构化数据的云端搜索服务。您可以通过我们提供的平台非常容易的拥有高质量,易扩展,可定制的搜索服务而不用关心搜索的各种技术细节。您所需要做的只是做好相关配置并上传数据,然后就可以通过API获得搜索结果了。我们同时还提供了典型语言的SDK,具体支持的语言的SDK请参看管理界面中的下载中心。

Q: 开放搜索能给我带来什么样的好处?

开放搜索是在云端的搜索服务 ,具有高扩展性,可以随着您的数据规模自动扩展所需的硬件资源,您不需要任何硬件投入就可以拥有搜索服务。搜索功能也不会给您的现有服务器带来任何压力。快速,高质量的搜索结果可以更好的满足您的用户的信息需求,从而提高您的产品的用户粘性,提高您的产品的流量和人气。最终为您带来可观的经济价值。

Q: 我可以发送多少次搜索请求?

目前没有限制,具体请根据实际使用情况在控制台进行手动配置,超大QPS提交申请后需要人工审核。该申请请尽量提前,如果QPS过大,系统内部会自动进行调整,可能需要几天的操作时间。

Q:搜索请求的latency有多大?

实际访问受查询query复杂程度、匹配的doc数影响很大,具体请根据实际情况自行测试数据。

Q:开放搜索如何收费?

具体请查看原生OpenSearch实例计费概述,目前计费模型改版后分为旧的存储+qps的计费方式以及新的LCU计费方式。(注:如果使用的是旧的计费方式,那么监控中的LCU消耗与计费无关,可以仅当成一个参考数据作搜索性能的参考。)

流程

Q: 什么叫应用,如何来创建?

应用是具有相同应用结构的可搜索的文档集合,您可以为应用定义数据表、字段类型、配置搜索属性,上传数据并获取搜索结果。您可以通过控制台界面或者Web API来创建,管理,删除应用。

Q: 定义应用结构时候的“索引到”的用处是什么?

query子句查询关键字的时候,必须要指定要查询的索引,即定义应用结构的索引到字段。索引字段包含一个或多个源字段。定义了索引字段,引擎构建的时候会建立查询词到文档的倒排链表,查询时可以通过查询词快速定位到文档,大大提高查询性能。

如论坛场景上有两个搜索需求:1,综合搜索(标题、内容、作者);2,标题搜索。源字段为title、body、author,那么可以将title、body、author索引到default字段上 ,再将title索引到 title_search字段上,这样query=default:’keyword’可以实现需求1, query=title_searc:’keyword’可以实现需求2。

Q: 什么是模版

模版是我们为了进一步减少您的工作而针对互联网上典型的数据制作的包括应用结构, 排序方法等在内的应用容器。目前我们提供的模版可以在创建应用的时候看到详细信息。将来我们会根据情况添加更多更丰富的模版供您选择。

Q: 选择模版后可以修改模版的应用结构么?

可以,具体参见应用管理-》详情-》线下变更,操作变更。具体步骤可参考文档:线下变更

Q: 如何上传数据到应用?

如果您是RDS、MaxCompute(原ODPS)、PolarDB的用户,您可以通过控制台上配置相关实例信息的方式来做自动同步,其他用户可以通过上传数据API或者管理界面中的上传功能来上传数据。

Q:我可以上传多少文档?

应用上传文档数没有上限,可以自行在控制台上配置文档容量配额,具体操作过程请查看应用管理-》配额及计费部分。同QPS峰值一样,对于大容量的申请需要人工审核。该项配额会影响计费信息,请按照实际需要配置。

Q: 如何删除应用?

您可以在管理工具中点击索引的名字后在索引详情页里点击“删除应用”,然后在系统提示中按确认后完成删除的工作。

Q: 如何删除应用中的文档?

在上传的数据中通过SDK设置delete操作就可以实现对于指定文档的删除。另外在控制台——搜索测试界面中也提供了对于具体文档的删除功能。

Q: 如何清空应用?

如果您需要保留应用名,您需要逐个删除应用中的文档来清空索引。如果您不需要保留应用名,您可以创建一个新应用并拷贝相关配置到应用来实现清空的目的。后续我们会提供独立的数据清空功能。目前高级版支持定时清理任务,保留7-180天的文档。

数据导入

Q: 开放搜索是否可以用在阿里云的数据库服务上(RDS)?

可以。只需在应用数据源配置好RDS的实例信息,即可实现RDS操作自动同步到OpenSearch系统(配置完毕后需要执行数据导入并索引重建,以便将当前全量导入到系统中)。

Q:OpenSearch现在支持哪些阿里云产品直接对接?

目前支持RDS、MaxCompute(原ODPS)、PolarDB,后续也会有其他的产品陆续接入,敬请期待。

Q:API/SDK上传文档格式是怎样的?

目前我们支持JSON格式。请参考模版页面中提供的样例文件或者API文档数据处理部分说明。

Q:add和update命令有什么区别?

add或update时上传的文档,如果没有给定一些字段的值,add会用默认值覆盖,update不处理。

搜索

Q: 开放搜索都提供哪些搜索功能?

开放搜索提供针对文本,数字等基本类型的搜索,并提供查询、过滤、排序、统计、聚合等功能,典型数据模版,自定义索引结构,自定义搜索结果排序、自定义查询分析(同义词、纠错等)以及下拉提示。

Q: 如何获取全部文档?

不支持。搜索引擎的重点是尽可能短的时间内将最优的结果返回,所以未提供查看全部文档的功能。OpenSearch有最大的返回结果数的限制(具体查看系统限制),即使翻页也只能在返回结果数viewtotal中进行。

Q:Array类型为什么在查询结果里面是string,而不是数组?

Array类型搜索结果是通过\t分隔的。

Q:OpenSearch能否自行指定分词方式和词库?

分词只要在两个地方使用,一个是build索引时,一个是查询时。目前的词库都是全系统公共的配置,不支持用户自定义词库。但目前OpenSearch系统支持多种分词方式,包括了自定义分词,具体请参考文档“用户指南”中的“字段类型和分词类型”。

Q:文档中有“吃饭了”,我搜索“吃饭了吗”怎么搜不出来?

原因是目前OpenSearch分词后的term需要全部命中才能返回文档,上面的query=default:’吃饭了吗’相当于query=default:’吃饭’ AND default:’了’ AND default:’吗’,而文档中没有“吗”这个term,所以文档不会被召回。

这种情况下可以配置下查询分析的“词权重”功能,会对不重要的词做RANK操作,解决长尾query的召回问题。如上述的query会被自动改写为:query=default:’吃饭’ RANK default:’了’ RANK default:’吗’,这样上面的文档就会被召回,且排序上会排到“吃饭”文档的前面。

Q:我搜索”mx”和”player”,文档中有”mxplayer”,为什么没有召回?

对于英文最小分词粒度到单词级别,上述文档中的”mxplayer”会被分成一个词,所以搜索”mx”、”player”及”mx player”都无法召回带有”mxplayer”的文档。

Q:OpenSearch支持小语种搜索吗?

目前系统只支持中英文的语义分词,其他以空格分隔的语种(葡语、俄语等)也可以支持基本的单词匹配,但不支持语义(词组),而不以空格分隔的语种(日语、韩语等)则无法支持,目前已推出泰语、越南语分析器,具体请参考:文本分析器

Q:搜索结果上如何分离相同会员的产品,每家会员只出1条最相关的,然后显示总条目?

可以结合Aggregate子句和Distinct子句。distinct子句可以做到相同分类结果打散,aggregate子句可以对相同分类结果做统计。

Q:搜索是否存在缓存机制?

5分钟内的相同query的返回结果会被缓存,缓存默认自动开启,不支持修改或关闭。

API及SDK

Q:用SDK推数据的地址是哪啊?目前OpenSearch为多区域部署,每个区域都有独立的API入口,具体请查看应用详情中的API入口。

Q:通过SDK上传数据返回ok了,但为什么页面上看到有错误?要怎么获取错误消息?

SDK返回status为OK,只是表示系统接收到了数据。但是在后续数据处理过程中发生的错误,将会在控制台应用的错误日志展现出来。如果出现数据上传成功但是搜索不到,请先查看错误日志中的信息,修改后重新导入。目前暂时没有支持获取错误日志信息的接口。

如果问题还未能解决,麻烦提交工单反馈。