Simple Search Service 是一个 IBM Cloud 应用程序,可让您快速创建多面搜索引擎,公开可用于将搜索引入您自己的应用程序的 API。该服务还创建了一个网站,可让您预览 API 并根据您自己的数据对其进行测试,以及通过简单的 CMS 管理您的数据。
部署后,使用浏览器上传 CSV 或 TSV 数据。指定要分面的字段,服务将处理其余部分。
该应用程序使用以下 Bluemix 服务:
数据上传后,您可以使用 UI 通过集成 CMS 浏览和管理您的数据。此外,支持 CORS 的 API 端点可在<your domain name>/search
处找到。该端点利用 Cloudant 内置的 Lucene 全文索引集成。这是你得到的:
?q=colour:black+AND+brand:fender
?q=black+fender+strat
?q=black+fender+strat&bookmark=<xxx>
?sort=color
或?sort=-color
降序排序您可以将其与 API 的其余部分一起使用,将简单搜索服务集成到您的应用程序中。如需完整的 API 参考,请单击此处。
虽然此应用程序是一个演示,旨在展示如何轻松地使用 Node.js 和 Cloudant 在 Bluemix 上构建应用程序,但它还提供了一个成熟的搜索 API,可以通过添加多个 Simple Search Service 节点进行扩展。事实上,类似的架构为 Bluemix 服务目录中的搜索体验提供了支持。
此处提供了使用简单搜索服务的更详细演练。
将此应用程序部署到 Bluemix 的最快方法是单击下面的“部署到 IBM Cloud”按钮。
没有 IBM Cloud 帐户?如果您尚未注册,那么当您单击该按钮时,系统会提示您注册 IBM Cloud 帐户。注册,验证您的电子邮件地址,然后返回此处并再次单击部署到 IBM Cloud按钮。您的新凭证允许您部署到该平台,还可以使用 Bluemix 和 Git 在线编码。如果您对使用 Bluemix 有疑问,请在 IBM Cloud 文档中查找答案。
手动部署到 IBM Cloud 需要git
和 Cloud Foundry CLI
$ git clone https://github.com/ibm-watson-data-lab/simple-search-service.git
$ cf create-service cloudantNoSQLDB Lite simple-search-service-cloudant-service
$ cd simple-search-service
$ cf push
克隆此存储库,然后运行npm install
以添加运行应用程序所需的 Node.js 库。
然后创建一些包含您的 Cloudant URL 的环境变量。
# Cloudant URL
export SSS_CLOUDANT_URL= ' https://<USERNAME>:<PASSWORD>@<HOSTNAME> '
将USERNAME
、 PASSWORD
和HOSTNAME
占位符替换为您自己的 Cloudant 帐户的详细信息。
然后运行:
node app.js
简单搜索服务利用 Etcd 来发现和利用我们的一些其他简单服务来扩展和改进服务。
简单搜索服务可用的其他服务包括:
启用服务注册表需要设置环境变量ETCD_URL
。这应该是您的 Etcd 实例的 URL,包括任何基本的 HTTP 身份验证信息
export ETCD_URL='http://username:[email protected]'
如果启用了服务注册表,任何发现的服务都将显示在“服务”页面上,并带有用于启用或禁用这些服务的切换开关。
一旦启用,这些服务将自动集成到简单搜索服务中。
如果您已将内容上传到简单搜索服务,但现在只想公开/search
端点,则可以启用“锁定模式”。
只需在运行简单搜索服务之前将名为LOCKDOWN
的环境变量设置为true
:
export LOCKDOWN=true
node app.js
或在 Bluemix 中设置自定义环境变量。
当检测到锁定模式时,所有 Web 请求都将收到401 Unauthorised
响应,但/search
端点除外,它将继续工作。这可以防止您的数据被修改,直到通过删除环境变量再次关闭锁定模式。
如果您希望在锁定模式下访问简单搜索服务,您可以通过设置另外两个环境变量来启用基本 HTTP 身份验证:
SSS_LOCKDOWN_USERNAME
SSS_LOCKDOWN_PASSWORD
设置完毕后,您可以通过提供匹配的用户名和密码来绕过锁定模式。如果您访问 UI,您的浏览器将提示您输入这些详细信息。如果您想访问 API,您可以在请求中提供用户名和密码:
curl -X GET ' http://<yourdomain>/row/4dac2df712704b397f1b64a1c8e25033 ' --user < username > : < password >
简单搜索服务有一个 API,允许您在提供的 UI 之外管理数据。使用它可以将简单搜索服务与您的应用程序集成。
搜索由GET /search
端点提供。
使用字段搜索来搜索数据集中的任何索引字段。
# Return any docs where colour=black
GET /search ? q=colour:black
字段搜索使用 Cloudant Search。
使用自由文本搜索在数据集中的所有字段中进行搜索。
# Return any docs 'black' is mentioned
GET /search ? q=black
使用bookmark
参数获取下一页结果。 /search
端点的所有结果中都提供了这一点(请参阅下面的示例响应)。将其传递到下一个搜索(使用相同的查询参数)以返回下一组结果。
# Return the next set of docs where 'black' is mentioned
GET /search ? q=black & bookmark= < ... >
可以使用limit
参数更改返回结果的数量。
# Return the next set of docs where 'black' is mentioned, 10 at a time
GET /search ? q=black & bookmark= < ... >& limit=10
所有搜索都会以相同的方式响应。
{
"total_rows": 19, // The total number of rows in the dataset
"bookmark": "g1AAAA...JjFkA0kLVvg", // bookmark, for pagination
"rows": [ // the rows returned in this response
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... }
],
"counts": { // counts of the fields which were selected as facets during import
"type": {
"Black": 19
}
},
"_ts": 1467108849821
}
可以使用其唯一 ID(在每行的_id
字段中找到)返回特定行。这是通过使用GET /row/:id
端点来完成的。
GET /row/44d2a49201625252a51d252824932580
这将返回该特定行的 JSON 表示形式。
可以使用POST /row
端点一次添加一行新数据。
调用此端点,传递与现有数据中的字段匹配的键/值对。没有必填字段,并且将强制执行所有字段类型。如果传入数据集中尚不存在的任何字段,则请求将失败。
POST /row -d ' field_1=value_1&field_n=value_n '
新行的_id
将自动生成并在响应的id
字段中返回。
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 1-8a23bfa9ee2c88f2ae8dd071d2cafd56 "
}
可以使用PUT /row/:id
端点更新现有数据。
调用此端点,传入与现有数据中的字段匹配的键/值对 - 您还必须在键/值对中包含_id
参数。没有必填字段,并且将强制执行所有字段类型。如果传入数据集中尚不存在的任何字段,则请求将失败。
注意:更新时未提供的任何字段都将被删除。即使字段没有更改,也必须始终提供它以保留其值。
响应与添加行的响应类似,但请注意文档的修订号已增加。
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 2-6281e0a21ed461659dba6a96d3931ccf "
}
可以使用在每行的_id
字段中找到的唯一 ID 来删除特定行。这是通过使用DELETE /row/:id
端点来完成的。
DELETE /row/44d2a49201625252a51d252824932580
响应与编辑一行类似,但再次注意文档的修订号再次增加。
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 3-37b4f5c715916bf8f90ed997d57dc437 "
}
以编程方式删除所有数据并初始化索引
POST /initialize
在有效负载中包含schema
属性,定义以下结构
{ "fields": [
{
"name": "id",
"type": "string",
"example": "example_id",
"facet": true
},
{
"name": "score",
"type": "number",
"example": 8,
"facet": false
},
{
"name": "tags",
"type": "arrayofstrings",
"example": "example_tag_1,example_tag_2",
"facet": true
}
]
}
> This example defines a schema containing three fields of which two will be enabled for faceted search.
有效值:
name
:任意字符串type
: number
、 boolean
、 string
、 arrayofstrings
(例如val1,val2,val3
)example
:此type
的任何有效值facet
: true
或false
请参阅 https://github.com/IBM/metrics-collector-client-node#privacy-notice
对于手动部署,可以通过删除require("metrics-tracker-client").track();
来禁用部署跟踪。从app.js
主服务器文件的末尾开始。
版权所有 2018 IBM 云数据服务
根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可证,否则您不得使用此文件。您可以在以下位置获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可证分发的软件均按“原样”分发,不带任何明示或暗示的保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。