Simple Search Service adalah aplikasi IBM Cloud yang memungkinkan Anda dengan cepat membuat mesin pencari tersaring, menampilkan API yang dapat Anda gunakan untuk menghadirkan pencarian ke dalam aplikasi Anda sendiri. Layanan ini juga membuat situs web yang memungkinkan Anda melihat pratinjau API dan mengujinya terhadap data Anda sendiri serta mengelola data Anda melalui CMS sederhana.
Setelah diterapkan, gunakan browser untuk mengunggah data CSV atau TSV. Tentukan bidang yang akan difaset, dan layanan akan menangani sisanya.
Aplikasi ini menggunakan layanan Bluemix berikut:
Setelah data diunggah, Anda dapat menggunakan UI untuk menelusuri dan mengelola data Anda melalui CMS terintegrasi. Selain itu, titik akhir API yang mendukung CORS tersedia di <your domain name>/search
. Titik akhir memanfaatkan integrasi bawaan Cloudant untuk pengindeksan teks lengkap Lucene. Inilah yang Anda dapatkan:
?q=colour:black+AND+brand:fender
?q=black+fender+strat
?q=black+fender+strat&bookmark=<xxx>
?sort=color
atau ?sort=-color
untuk menurunAnda dapat menggunakan ini bersama dengan API lainnya untuk mengintegrasikan Layanan Pencarian Sederhana ke dalam aplikasi Anda. Untuk referensi API lengkap, klik di sini.
Meskipun aplikasi ini adalah demo untuk menunjukkan betapa mudahnya Anda membuat aplikasi di Bluemix menggunakan Node.js dan Cloudant, aplikasi ini juga menyediakan API pencarian matang yang dapat diskalakan dengan penambahan beberapa node Layanan Pencarian Sederhana. Faktanya, arsitektur serupa mendukung pengalaman pencarian di katalog layanan Bluemix.
Panduan lebih rinci tentang penggunaan Layanan Pencarian Sederhana tersedia di sini.
Cara tercepat untuk menyebarkan aplikasi ini ke Bluemix adalah dengan mengklik tombol Deploy to IBM Cloud di bawah.
Tidak punya akun IBM Cloud? Jika Anda belum melakukannya, Anda akan diminta untuk mendaftar akun IBM Cloud saat Anda mengklik tombol. Daftar, verifikasi alamat email Anda, lalu kembali ke sini dan klik tombol Deploy to IBM Cloud lagi. Kredensial baru Anda memungkinkan Anda menerapkan ke platform dan juga membuat kode online dengan Bluemix dan Git. Jika Anda memiliki pertanyaan tentang bekerja di Bluemix, temukan jawabannya di IBM Cloud Docs.
Penerapan manual ke IBM Cloud memerlukan git
dan 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
Kloning repositori ini lalu jalankan npm install
untuk menambahkan pustaka Node.js yang diperlukan untuk menjalankan aplikasi.
Kemudian buat beberapa variabel lingkungan yang berisi URL Cloudant Anda.
# Cloudant URL
export SSS_CLOUDANT_URL= ' https://<USERNAME>:<PASSWORD>@<HOSTNAME> '
mengganti placeholder USERNAME
, PASSWORD
dan HOSTNAME
untuk detail akun Cloudant Anda sendiri.
Kemudian jalankan:
node app.js
Layanan Pencarian Sederhana menggunakan Etcd untuk menemukan dan memanfaatkan beberapa Layanan Sederhana kami yang lain untuk memperluas dan meningkatkan layanan.
Layanan lain yang tersedia pada Layanan Pencarian Sederhana adalah:
Mengaktifkan Service Registry memerlukan pengaturan variabel lingkungan, ETCD_URL
. Ini harus berupa URL instance Etcd Anda termasuk informasi autentikasi HTTP dasar apa pun
export ETCD_URL='http://username:[email protected]'
Jika Service Registry diaktifkan, layanan apa pun yang ditemukan akan ditampilkan di halaman Layanan, dengan tombol untuk mengaktifkan atau menonaktifkan layanan ini.
Setelah diaktifkan, layanan ini secara otomatis akan diintegrasikan ke dalam Layanan Pencarian Sederhana.
Jika Anda telah mengunggah konten Anda ke Layanan Pencarian Sederhana namun sekarang hanya ingin titik akhir /search
tersedia secara publik, Anda dapat mengaktifkan "Mode penguncian".
Cukup setel variabel lingkungan bernama LOCKDOWN
ke true
sebelum menjalankan Layanan Pencarian Sederhana:
export LOCKDOWN=true
node app.js
atau atur variabel lingkungan khusus di Bluemix.
Ketika mode lockdown terdeteksi, semua permintaan web akan mendapat respons 401 Unauthorised
, kecuali titik akhir /search
yang akan terus berfungsi. Hal ini mencegah data Anda diubah hingga mode lockdown dinonaktifkan lagi, dengan menghapus variabel lingkungan.
Jika Anda ingin mendapatkan akses ke Layanan Pencarian Sederhana saat dalam mode lockdown, Anda dapat mengaktifkan otentikasi HTTP dasar dengan mengatur dua variabel lingkungan lagi:
SSS_LOCKDOWN_USERNAME
SSS_LOCKDOWN_PASSWORD
Ketika ini diatur, Anda dapat melewati mode lockdown dengan memberikan nama pengguna dan kata sandi yang cocok. Jika Anda mengakses UI, browser Anda akan meminta Anda memberikan detail ini. Jika Anda ingin mengakses API, Anda dapat memberikan nama pengguna dan kata sandi sebagai bagian dari permintaan Anda:
curl -X GET ' http://<yourdomain>/row/4dac2df712704b397f1b64a1c8e25033 ' --user < username > : < password >
Layanan Pencarian Sederhana memiliki API yang memungkinkan Anda mengelola data di luar UI yang disediakan. Gunakan ini untuk mengintegrasikan Layanan Pencarian Sederhana dengan aplikasi Anda.
Pencarian disediakan oleh titik akhir GET /search
.
Telusuri bidang mana pun yang diindeks dalam kumpulan data Anda menggunakan penelusuran berbidang.
# Return any docs where colour=black
GET /search ? q=colour:black
Pencarian lapangan menggunakan Cloudant Search.
Telusuri seluruh bidang dalam kumpulan data Anda menggunakan penelusuran teks bebas.
# Return any docs 'black' is mentioned
GET /search ? q=black
Dapatkan halaman hasil berikutnya menggunakan parameter bookmark
. Ini disediakan di semua hasil dari titik akhir /search
(lihat contoh respons di bawah). Teruskan ini ke penelusuran berikutnya (dengan parameter kueri yang sama) untuk mengembalikan rangkaian hasil berikutnya.
# Return the next set of docs where 'black' is mentioned
GET /search ? q=black & bookmark= < ... >
Dimungkinkan untuk mengubah jumlah hasil yang dikembalikan menggunakan parameter limit
.
# Return the next set of docs where 'black' is mentioned, 10 at a time
GET /search ? q=black & bookmark= < ... >& limit=10
Semua pencarian akan merespons dengan cara yang sama.
{
"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
}
Baris tertentu dapat dikembalikan menggunakan ID uniknya, yang terdapat di bidang _id
setiap baris. Ini dilakukan dengan menggunakan titik akhir GET /row/:id
.
GET /row/44d2a49201625252a51d252824932580
Ini akan mengembalikan representasi JSON dari baris spesifik ini.
Data baru dapat ditambahkan baris demi baris menggunakan titik akhir POST /row
.
Panggil titik akhir ini dengan meneruskan pasangan kunci/nilai yang cocok dengan bidang dalam data yang ada. TIDAK ada bidang yang wajib diisi, dan semua jenis bidang akan diterapkan. Permintaan akan gagal jika ada bidang yang diteruskan namun belum ada dalam kumpulan data.
POST /row -d ' field_1=value_1&field_n=value_n '
_id
dari baris baru akan dibuat secara otomatis dan dikembalikan di bidang id
respons.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 1-8a23bfa9ee2c88f2ae8dd071d2cafd56 "
}
Data yang keluar dapat diperbarui menggunakan titik akhir PUT /row/:id
.
Panggil titik akhir ini dengan meneruskan pasangan kunci/nilai yang cocok dengan bidang dalam data yang ada - Anda juga harus menyertakan parameter _id
dalam pasangan kunci/nilai. TIDAK ada bidang yang wajib diisi, dan semua jenis bidang akan diterapkan. Permintaan akan gagal jika ada bidang yang diteruskan namun belum ada dalam kumpulan data.
Catatan: Bidang apa pun yang tidak disediakan pada saat pembaruan akan dihapus. Sekalipun suatu bidang tidak berubah, bidang tersebut harus selalu disediakan untuk menjaga nilainya.
Responsnya mirip dengan menambahkan baris, meskipun perlu diperhatikan bahwa jumlah revisi dokumen meningkat.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 2-6281e0a21ed461659dba6a96d3931ccf "
}
Baris tertentu dapat dihapus menggunakan ID uniknya, yang terdapat di bidang _id
setiap baris. Hal ini dilakukan dengan menggunakan titik akhir DELETE /row/:id
.
DELETE /row/44d2a49201625252a51d252824932580
Responsnya mirip dengan mengedit satu baris, meskipun sekali lagi perhatikan bahwa jumlah revisi dokumen bertambah sekali lagi.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 3-37b4f5c715916bf8f90ed997d57dc437 "
}
Untuk menghapus semua data secara terprogram dan menginisialisasi indeks
POST /initialize
termasuk properti schema
dalam payload yang mendefinisikan struktur berikut
{ "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.
Nilai yang valid:
name
properti : string apa puntype
properti : number
, boolean
, string
, arrayofstrings
(misalnya val1,val2,val3
)example
properti : nilai apa pun yang valid untuk type
inifacet
properti : true
atau false
Lihat https://github.com/IBM/metrics-collector-client-node#privacy-notice
Untuk penerapan manual, pelacakan penerapan dapat dinonaktifkan dengan menghapus require("metrics-tracker-client").track();
dari akhir file server utama app.js
Hak Cipta 2018 Layanan Data Cloud IBM
Berlisensi di bawah Lisensi Apache, Versi 2.0 ("Lisensi"); Anda tidak boleh menggunakan file ini kecuali sesuai dengan Lisensi. Anda dapat memperoleh salinan Lisensi di
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diwajibkan oleh undang-undang yang berlaku atau disetujui secara tertulis, perangkat lunak yang didistribusikan berdasarkan Lisensi didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat Lisensi untuk bahasa tertentu yang mengatur izin dan batasan berdasarkan Lisensi.