Espero que estés bien, necesito ayuda con respecto al motor de búsqueda de Elastic. lo que estoy haciendo es intentar crear un motor de búsqueda. He publicado con éxito mis datos a través de kibana en el motor de búsqueda elástica. pero " ¿cómo puedo agregar el componente de búsqueda de elastyicsearch a mi aplicación de reacción ?" Tengo como 4 millones de registros en el índice de kibana, cuando trato de buscar directamente desde reaccionar, toma mucho tiempo mostrar los registros en mi aplicación frontal con api de nodejs. a continuación se muestra el código con nodejs, pero el problema con este código solo me da 10 registros.
router.get('/tweets', (req, res)=>{ let query = { index: 'tweets', // size: 10000 } if(req.query.tweets) query.q = `*${req.query.tweets}*`; client.search(query) .then(resp => { return res.status(200).json({ tweets: resp.body.hits.hits }); }) .catch(err=>{ console.log(err); return res.status(500).json({ err }); });});
¿Hay alguna forma de implementar el componente elasticsearch directamente en mi aplicación reactjs? como con localhost:9200/index.. ¿directamente desde la API de elasticsearch?
Puede usar SearchKit para consultar directamente elasticsearch desde su aplicación de reacción. Pero tenga en cuenta que exponer los servicios de base de datos fuera de su propia infraestructura es una mala práctica.
Puedes usar el componente así:
import { SearchkitManager, SearchkitProvider, SearchkitComponent } from 'searchkit' const searchkit = new SearchkitManager(host) class Render extends SearchkitComponent { render(){ let results = await this.searchkit.reloadSearch() return <div>{results}</div> } } function table(){ return <SearchkitProvider searchkit={searchkit}> <Render /> </SearchkitProvider> }Su solicitud a Elasticsearch me parece un poco extraña, ¿ha intentado buscar usando un body como en la documentación ? Esta línea:
if(req.query.tweets) query.q = `*${req.query.tweets}*`;no parece una forma correcta de escribir una consulta. ¿Qué campo desea buscar?
Vi que intentaste usar el campo de size , que debería ser correcto. También puedes intentar lo siguiente:
client.search({ index: 'tweets', body: { size: 1000, // You can put the size here to get more than 10 results query: { wildcard: { yourfield: `*${req.query.tweets}*` } } } }, (err, result) => { if (err) console.log(err) })