需要一些关于 Elasticsearch 引擎和 react js 的帮助

Posted

技术标签:

【中文标题】需要一些关于 Elasticsearch 引擎和 react js 的帮助【英文标题】:Need some help regarding the Elasticsearch engine and react js 【发布时间】:2021-12-18 13:12:44 【问题描述】:

我希望你做得很好,我需要一些关于 Elasticsearch 引擎的帮助。我正在做的是我正在尝试创建一个搜索引擎,我已经成功地将我的数据通过 kibana 发布到 elasticsearch 引擎。但是“但是如何将 elastyicsearch 的搜索组件添加到我的 react 应用程序中”,我在 kibana 索引中有 400 万条记录,当我尝试直接从 react 中搜索时需要很长时间使用 nodejs api 将记录显示到我的 frontapp 应用程序中。下面是 nodejs 的代码,但是这个代码的问题它只给了我 10 条记录。

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
    );
);

);

有什么方法可以将 elasticsearch 组件直接添加到我的 reactjs 应用程序中。像 localhost:9200/index.. 一样直接来自 elasticsearch api?

【问题讨论】:

【参考方案1】:

您对 Elasticsearch 的请求对我来说有点奇怪,您是否尝试过使用 body 进行搜索,例如 documentation?这一行:

if(req.query.tweets) query.q = `*$req.query.tweets*`;

似乎不是编写查询的正确方法。您要搜索哪个字段?

我看到您尝试使用size 字段,这应该是正确的。您还可以尝试以下方法:

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)
)

【讨论】:

以及从 react 调用它的 api 应该是什么? 其实我需要创建搜索引擎。我是 elasticsearch 引擎的新手,我们可以在我们的 react App 中添加一个 elasticsearch 组件吗? 你说这是你的 NodeJS 应用程序,所以它应该是你的服务器。因此,您的 React 应用程序需要调用您的端点。【参考方案2】:

您可以使用SearchKit 直接从您的 react 应用中查询 elasticsearch。但请注意,在您自己的基础架构之外公开数据库服务是不好的做法。

你可以像这样使用组件:

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>

【讨论】:

我可以直接从我的 react 应用调用 localhost:9200 吗?

以上是关于需要一些关于 Elasticsearch 引擎和 react js 的帮助的主要内容,如果未能解决你的问题,请参考以下文章

搜索引擎solr和elasticsearch

关于Elasticsearch性能优化几个点

关于Elasticsearch那些事

高效搜索引擎ElasticSearch实战篇

Elasticsearch 分布式搜索引擎 -- 初识elasticsearch(了解ES倒排索引es的一些概念安装eskibana)

漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)