️ Klien ini tidak digunakan lagi️ Mulai Penelusuran Perusahaan versi 8.3.2, kami mengarahkan pengguna ke Klien Node Pencarian Perusahaan baru dan menghentikan penggunaan klien ini.
Upaya pengembangan kami pada proyek ini akan terbatas pada perbaikan bug. Semua peningkatan di masa depan akan difokuskan pada Klien Node Pencarian Perusahaan.
Terima kasih! - elastis
Klien Node.JS pihak pertama untuk membangun pengalaman pencarian yang sangat baik dan relevan dengan Elastic App Search.
Untuk menginstal paket ini, jalankan:
npm install @elastic/app-search-node
Klien ini dibuat versinya dan dirilis bersamaan dengan Penelusuran Aplikasi.
Untuk menjamin kompatibilitas, gunakan versi terbaru pustaka ini dalam versi utama penerapan Penelusuran Aplikasi yang sesuai.
Misalnya, untuk App Search 7.3
, gunakan 7.3
dari pustaka ini atau yang lebih baru, tetapi bukan 8.0
.
Jika Anda menggunakan versi SaaS yang tersedia di Swiftype.com pada Pencarian Aplikasi, Anda harus menggunakan klien versi 7.5.x.
Menggunakan klien ini mengasumsikan bahwa Anda sudah memiliki instance Elastic App Search yang aktif dan berjalan.
Klien dikonfigurasi menggunakan parameter baseUrlFn
dan apiKey
.
const apiKey = 'private-mu75psc5egt9ppzuycnc2mc3'
const baseUrlFn = ( ) => 'http://localhost:3002/api/as/v1/'
const client = new AppSearchClient ( undefined , apiKey , baseUrlFn )
Catatan:
[apiKey]
mengautentikasi permintaan ke API. Anda dapat menggunakan jenis kunci apa pun dengan klien, namun masing-masing memiliki cakupan yang berbeda. Untuk informasi lebih lanjut tentang kunci, lihat dokumentasinya.
Saat menggunakan versi SaaS yang tersedia di Swiftype.com pada Penelusuran Aplikasi, Anda dapat mengonfigurasi klien menggunakan hostIdentifier
Anda, bukan parameter baseUrlFn
. hostIdentifier
dapat ditemukan dalam menu Kredensial.
const AppSearchClient = require ( '@elastic/app-search-node' )
const hostIdentifier = 'host-c5s2mj'
const apiKey = 'private-mu75psc5egt9ppzuycnc2mc3'
const client = new AppSearchClient ( hostIdentifier , apiKey )
const engineName = 'favorite-videos'
const documents = [
{
id : 'INscMGmhmX4' ,
url : 'https://www.youtube.com/watch?v=INscMGmhmX4' ,
title : 'The Original Grumpy Cat' ,
body : 'A wonderful video of a magnificent cat.'
} ,
{
id : 'JNDFojsd02' ,
url : 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' ,
title : 'Another Grumpy Cat' ,
body : 'A great video of another cool cat.'
}
]
client
. indexDocuments ( engineName , documents )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error ) )
Perhatikan bahwa API ini tidak akan menimbulkan kesalahan pengindeksan. Kesalahan dicantumkan di isi respons per dokumen:
[
{ "id" : " park_rocky-mountain " , "errors" : [] },
{
"id" : " park_saguaro " ,
"errors" : [ " Invalid field value: Value 'foo' cannot be parsed as a float " ]
}
]
const engineName = 'favorite-videos'
const documents = [
{
id : 'INscMGmhmX4' ,
title : 'Updated title'
}
]
client
. updateDocuments ( engineName , documents )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error ) )
const engineName = 'favorite-videos'
const documentIds = [ 'INscMGmhmX4' , 'JNDFojsd02' ]
client
. getDocuments ( engineName , documentIds )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
// Without paging
client
. listDocuments ( engineName )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
// With paging
client
. listDocuments ( engineName , { page : { size : 10 , current : 1 } } )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const documentIds = [ 'INscMGmhmX4' , 'JNDFojsd02' ]
client
. destroyDocuments ( engineName , documentIds )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
client
. listEngines ( { page : { size : 10 , current : 1 } } )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
client
. getEngine ( engineName )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
client
. createEngine ( engineName , { language : 'en' } )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
client
. destroyEngine ( engineName )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const query = 'cat'
const searchFields = { title : { } }
const resultFields = { title : { raw : { } } }
const options = { search_fields : searchFields , result_fields : resultFields }
client
. search ( engineName , query , options )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const searches = [
{ query : 'cat' , options : {
search_fields : { title : { } } ,
result_fields : { title : { raw : { } } }
} } ,
{ query : 'grumpy' , options : { } }
]
client
. multiSearch ( engineName , searches )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const options = {
size : 3 ,
types : {
documents : {
fields : [ 'title' ]
}
}
}
client
. querySuggestion ( engineName , 'cat' , options )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
client
. listCurations ( engineName )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
// Pagination details are optional
const paginationDetails = {
page : {
current : 2 ,
size : 10
}
}
client
. listCurations ( engineName , paginationDetails )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const curationId = 'cur-7438290'
client
. getCuration ( engineName , curationId )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const newCuration = {
queries : [ 'cat blop' ] ,
promoted : [ 'Jdas78932' ] ,
hidden : [ 'INscMGmhmX4' , 'JNDFojsd02' ]
}
client
. createCuration ( engineName , newCuration )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const curationId = 'cur-7438290'
// "queries" is required, either "promoted" or "hidden" is required.
// Values sent for all fields will overwrite existing values.
const newDetails = {
queries : [ 'cat blop' ] ,
promoted : [ 'Jdas78932' , 'JFayf782' ]
}
client
. updateCuration ( engineName , curationId , newDetails )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const curationId = 'cur-7438290'
client
. destroyCuration ( engineName , curationId )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
client
. getSchema ( engineName )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'favorite-videos'
const schema = {
views : 'number' ,
created_at : 'date'
}
client
. updateSchema ( engineName , schema )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
Membuat kunci pencarian yang hanya akan mengembalikan kolom judul.
const publicSearchKey = 'search-xxxxxxxxxxxxxxxxxxxxxxxx'
// This name must match the name of the key above from your App Search dashboard
const publicSearchKeyName = 'search-key'
const enforcedOptions = {
result_fields : { title : { raw : { } } } ,
filters : { world_heritage_site : 'true' }
}
// Optional. See https://github.com/auth0/node-jsonwebtoken#usage for all options
const signOptions = {
expiresIn : '5 minutes'
}
const signedSearchKey = AppSearchClient . createSignedSearchKey (
publicSearchKey ,
publicSearchKeyName ,
enforcedOptions ,
signOptions
)
const baseUrlFn = ( ) => 'http://localhost:3002/api/as/v1/'
const client = new AppSearchClient ( undefined , signedSearchKey , baseUrlFn )
client . search ( 'sample-engine' , 'everglade' )
const engineName = 'my-meta-engine'
client
. createMetaEngine ( engineName , [ 'source-engine-1' , 'source-engine-2' ] )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'my-meta-engine'
client
. addMetaEngineSources ( engineName , [ 'source-engine-3' ] )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'my-meta-engine'
client
. deleteMetaEngineSources ( engineName , [ 'source-engine-3' ] )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
const engineName = 'my-meta-engine'
client
. createEngine ( engineName , {
type : 'meta' ,
source_engines : [ 'source-engine-1' , 'source-engine-2' ]
} )
. then ( response => console . log ( response ) )
. catch ( error => console . log ( error . errorMessages ) )
Kami mencoba untuk terus memperbarui klien ini dengan semua titik akhir API yang tersedia dari Penelusuran Aplikasi.
Ada beberapa API yang mungkin belum tersedia. Untuk API tersebut, gunakan klien tingkat rendah untuk terhubung guna mencapai titik akhir Penelusuran Aplikasi mana pun.
const engineName = 'favorite-videos'
const options = {
query : 'cats'
}
const Client = require ( '@elastic/app-search-node/lib/client' )
const client = new Client ( 'private-mu75psc5egt9ppzuycnc2mc3' , 'http://localhost:3002/api/as/v1/' )
client . post ( `engines/ ${ encodeURIComponent ( engineName ) } /search` , options ) . then ( console . log )
npm test
Spesifikasi dalam proyek ini menggunakan node-replay untuk merekam perlengkapan.
Perlengkapan baru harus diambil dari instance App Search yang sedang berjalan.
Untuk menangkap perlengkapan baru, jalankan perintah seperti berikut:
nvm use
HOST_IDENTIFIER=host-c5s2mj API_KEY=private-b94wtaoaym2ovdk5dohj3hrz REPLAY=record npm run test -- -g 'should create a meta engine'
Untuk menguraikannya sedikit...
HOST_IDENTIFIER
- Gunakan ini untuk mengganti nilai palsu yang digunakan dalam pengujian dengan nilai valid aktual untuk contoh Penelusuran Aplikasi Anda yang akan direkamAPI_KEY
- Gunakan ini untuk mengganti nilai palsu yang digunakan dalam pengujian dengan nilai valid aktual untuk contoh Penelusuran Aplikasi Anda yang akan direkamREPLAY=record
- Memberitahukan pemutaran ulang untuk merekam respons baru jika belum adanpm run test
- Jalankan pengujian-- -g 'should create a meta engine'
- Batasi pengujian untuk HANYA menjalankan pengujian baru yang Anda buat, 'harus membuat mesin meta' misalnyaIni akan membuat perlengkapan baru, pastikan Anda mengedit perlengkapan itu secara manual untuk mengganti pengidentifikasi host dan kunci api yang dicatat dalam perlengkapan itu dengan nilai yang digunakan pengujian.
Anda juga harus memastikan bahwa perlengkapan terletak di direktori dengan nama yang benar di bawah fixtures
sesuai dengan host yang digunakan.
Anda akan tahu jika ada yang tidak beres karena ini akan error saat Anda menjalankan npm run test
dengan error seperti:
Error: POST https://host-c5s2mj.api.swiftype.com:443/api/as/v1/engines refused: not recording and no network access
Jika ada sesuatu yang tidak berfungsi seperti yang diharapkan, silakan buka masalah.
Taruhan terbaik Anda adalah membaca dokumentasinya.
Anda dapat memeriksa forum diskusi komunitas Elastic App Search.
Kami menyambut kontributor untuk proyek ini. Sebelum Anda mulai, beberapa catatan...
Apache 2.0 © Elastis
Terima kasih kepada semua kontributor!