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
除非適用法律要求或書面同意,否則根據許可證分發的軟體均以「原樣」分發,不帶任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。