Searchkit es una biblioteca de código abierto que le ayuda a crear una excelente experiencia de búsqueda con Elasticsearch . Funciona con Javascript, React, Vue, Angular y más.
Sitio web | Demostraciones | Documentación | Discordia
Searchkit proporciona una interfaz de usuario de búsqueda para Elasticsearch u Opensearch. Con Searchkit, puede utilizar componentes de Instantsearch como Searchbox, filtros de refinamiento y resultados (¡y muchos más!) para crear una experiencia de búsqueda.
Searchkit es ideal para cualquiera que quiera crear una experiencia de búsqueda rápidamente.
Searchkit simplifica la interfaz de usuario de búsqueda con Elasticsearch:
Searchkit Bot le ayudará a comprender mejor este repositorio. Puede solicitar ejemplos de código, guía de instalación, ayuda de depuración y mucho más.
O consulte nuestra documentación para ver más ejemplos.
Instalar a través de npm o hilo
npm install searchkit @searchkit/api @searchkit/instantsearch-client
o vía CDN
< script src =" https://cdn.jsdelivr.net/npm/@searchkit/instantsearch-client@latest " > </ script >
< script src =" https://cdn.jsdelivr.net/npm/instantsearch.js@4 " > </ script >
< script src =" https://cdn.jsdelivr.net/npm/searchkit@latest " > </ script >
Searchkit requiere Elasticsearch 7.0 o superior u Opensearch 2.4 o superior.
A continuación usamos Docker para ejecutar Elasticsearch.
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.6.2
docker network create elastic
docker run --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e " discovery.type=single-node " -e " xpack.security.enabled=false " -e http.cors.enabled=true -e " http.cors.allow-origin='*' " -e http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization -e http.cors.allow-credentials=true -e network.publish_host=localhost -e xpack.security.enabled=false docker.elastic.co/elasticsearch/elasticsearch:8.6.2
Luego agreguemos un índice y algunos datos.
curl --location --request PUT ' http://localhost:9200/products '
--header ' Content-Type: application/json '
--data-raw ' {
"mappings": {
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"price": {
"type": "integer"
},
"categories": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
} '
curl --location --request POST ' http://localhost:9200/products/_doc '
--header ' Content-Type: application/json '
--data-raw ' {
"name": "Apple iPhone 12 Pro Max",
"description": "The iPhone 12 Pro Max is the most powerful iPhone ever. It has a 6.7-inch Super Retina XDR display, a Ceramic Shield front cover, and a triple-camera system with a LiDAR scanner. It also has a 5G connection, a 6-core CPU, and a 4-core GPU. The iPhone 12 Pro Max is available in 128GB, 256GB, and 512GB storage options.",
"categories": ["phones", "apple"],
"price": 800
} '
curl --location --request POST ' http://localhost:9200/products/_doc '
--header ' Content-Type: application/json '
--data-raw ' {
"name": "Apple iPhone 12 Pro",
"description": "The iPhone 12 Pro is the most powerful iPhone ever. It has a 6.1-inch Super Retina XDR display, a Ceramic Shield front cover, and a triple-camera system with a LiDAR scanner. It also has a 5G connection, a 6-core CPU, and a 4-core GPU. The iPhone 12 Pro is available in 128GB, 256GB, and 512GB storage options.",
"categories": ["phones", "apple"],
"price": 700
} '
Searchkit compatible con todos los marcos de Instantsearch. A continuación se muestra un ejemplo que utiliza reaccionar-instantsearch.
import Searchkit from "searchkit"
import Client from '@searchkit/instantsearch-client'
// import your InstantSearch components
import { InstantSearch , SearchBox , Hits , RefinementList , Pagination , RangeInput } from 'react-instantsearch' ;
const sk = new Searchkit ( {
connection : {
host : 'http://localhost:9200' ,
// with an apiKey
// https://www.searchkit.co/docs/guides/setup-elasticsearch#connecting-with-api-key
// apiKey: '##########'
// with a username/password
// https://www.searchkit.co/docs/guides/setup-elasticsearch#connecting-with-usernamepassword
//auth: {
// username: "elastic",
// password: "changeme"
//}
} ,
search_settings : {
search_attributes : [ { field : 'title' , weight : 3 } , 'actors' , 'plot' ] ,
result_attributes : [ 'title' , 'actors' , 'poster' , 'plot' ] ,
highlight_attributes : [ 'title' ] ,
facet_attributes : [
{ attribute : 'actors' , field : 'actors.keyword' , type : 'string' } ,
{ attribute : 'imdbrating' , type : 'numeric' , field : 'imdbrating' }
]
}
} )
const searchClient = Client ( sk ) ;
const App = ( ) => (
< InstantSearch
indexName = "imdb_movies"
searchClient = { searchClient }
>
< SearchBox / >
< div className = "left-panel" >
< RefinementList attribute = "actors" searchable = { true } limit = { 10 } / >
< RangeInput attribute = "imdbrating" / >
< / div >
< div className = "right-panel" >
< Hits / >
< Pagination / >
< / div >
< / InstantSearch >
}
siga la guía de introducción.
La API de Searchkit Node le permite enviar solicitudes a Elasticsearch desde el navegador. Esto es útil si desea ocultar Elasticsearch del navegador o si desea agregar filtros de permisos de usuario a la consulta.
Searchkit tiene un generador de consultas listo para usar, pero también puede personalizar la consulta pasando una función getQuery a apiClient.
const results = await apiClient . handleRequest ( req . body , {
getQuery : ( query , search_attributes ) => {
return [
{
combined_fields : {
query ,
fields : search_attributes ,
} ,
} ,
] ;
} ,
} ) ;
Searchkit admite la búsqueda de consultas KNN. A continuación se muestra un ejemplo de una búsqueda de consulta KNN.
const results = await client . handleRequest ( req . body , {
getKnnQuery ( query , search_attributes , config ) {
return {
field : 'dense-vector-field' ,
k : 10 ,
num_candidates : 100 ,
// supported in latest version of Elasticsearch
query_vector_builder : {
text_embedding : {
model_id : 'cookie_model' ,
model_text : query
}
}
}
}
} ) ;
Siga el tutorial de búsqueda semántica.
También puede anular toda la consulta con enlaces de solicitud. A continuación se muestra un ejemplo de un enlace de solicitud que agrega una consulta de nueva puntuación a la primera solicitud de búsqueda.
Puede aplicar esto en beforeSearch
y afterSearch
.
const results = await client . handleRequest ( req . body , {
hooks : {
beforeSearch : ( searchRequests ) => {
const uiRequest = searchRequests [ 0 ]
return [
{
... uiRequest ,
body : {
... uiRequest . body ,
rescore : {
window_size : 100 ,
query : {
rescore_query : {
match : {
plot : {
query : uiRequest . body . query ,
operator : "and" ,
} ,
} ,
} ,
query_weight : 1 ,
rescore_query_weight : 10 ,
}
}
}
} ,
searchRequests . slice ( 1 , searchRequests . length )
]
} ,
}
} ) ;
Lea más en los documentos de la API aquí.
Las reglas de consulta le permiten personalizar el comportamiento de la experiencia de búsqueda. Puede utilizar reglas de consulta para mejorar o filtrar resultados, o para cambiar la clasificación de los resultados, según un conjunto de condiciones.
A continuación se muestra un ejemplo de una regla de consulta que mejora los resultados de películas con Dan Aykroyd o Charlie Sheen y filtra los resultados para mostrar películas solo si la consulta es la palabra "película".
{
id : '1' ,
conditions : [
[
{
context : 'query' ,
value : 'movie' ,
match_type : 'exact'
}
]
] ,
actions : [
{
action : 'QueryBoost' ,
query : 'actors:"Dan Aykroyd" OR actors:"Charlie Sheen"' ,
weight : 2
} ,
{
action : 'QueryFilter' ,
query : 'type:"movie"'
}
]
}
Lea más en los documentos de reglas de consulta.
P: ¿Necesito exponer Elasticsearch a la Internet pública?
Searchkit envía solicitudes a Elasticsearch.
Searchkit ofrece ambas opciones: realizar la búsqueda directamente desde el navegador o utilizar la API de Searchkit para enviar solicitudes a Elasticsearch. Directamente desde el navegador ofrece una excelente experiencia para desarrolladores y creación de prototipos. Una vez que esté listo para la implementación, puede utilizar la API de Searchkit para enviar solicitudes a Elasticsearch.
P: ¿Necesito usar React?
Puedes usar React, React Native, Vue, Angular. Ni siquiera necesita usar un marco de interfaz, puede usar Javascript y HTML simples con widgets instantsearch.js.
P: ¿Qué versión de Elasticsearch es compatible?
Searchkit es compatible con Elasticsearch 7.0 y superior + Opensearch 2.0 y superior.
P: ¿Es compatible con Android e iOS?
Potencialmente. La API Searchkit imita la API de Algolia, por lo que debería ser posible utilizar el cliente Algolia Instantsearch con la API Searchkit con algunos ajustes. Si está interesado en esto, háganoslo saber.
P: ¿Por qué debería utilizar Searchkit en lugar de Algolia?
Elasticsearch tiene muchas ventajas sobre Algolia. Es posible que desee utilizar Elasticsearch como una alternativa más económica a Algolia, especialmente si tiene un conjunto de datos grande. Es posible que desee ejecutar Elasticsearch en su propia infraestructura o tener un mayor control sobre la relevancia de la consulta.