Node + Elasticsearch入门

为什么要用Elasticsearch?

以前一些简单的搜索功能,我们可以使用sql的查询语句实现,但是随着数据的增大,并且需求的增多,简单的sql查询已经不满足需求, Elasticsearch的功能: 1,分布式的搜索引擎和数据分析引擎; 2,全文检索,结构化检索,数据分析; 3,对海量数据进行近实时的处理;

Elasticsearch与编程语言交互

Elasticsearch 使用的是标准的 RESTful API 和 JSON。此外,我们还构建和维护了很多其他语言的客户端,例如 Java、Python、.NET、SQL 和 PHP。

安装Elasticsearch

在安装ES之前,我们需要安装java 1.8环境,java 1.8环境安装成功后,我们就可以安装ES了。

MAC环境下安装ES

Mac系统下使用Homebrew安装ES

brew install elasticsearch
复制代码
Centos下安装ES

切换到安装目录下,例如安装到/usr/share/,ES版本可以自行改变;

$ cd /usr/share/
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.tar.gz
$ tar -xvzf elasticsearch-6.5.0.tar.gz
$ cd elasticsearch-6.5.0/
复制代码
启动ES
$ cd bin/
$ ./elasticsearch
复制代码

但是你会发现出现下面这个错误

从错误信息中可以看出,ES不能使用root启动。 解决这个问题方法: 创建一个独立的用户,比如elk来启动elasticsearch,不用root用户启动;

创建用户

创建es用户后切换到es账号,再启动ES

$ useradd es
$ cd /usr/share/
$ chown -R es:es elasticsearch-6.5.0
$ su es
$ cd /usr/share/elasticsearch-6.5.0
$ cd bin/
$ ./elasticsearch -d
复制代码

注意: -d表示后台运行 查看是否启动成功,ES的默认端口是在9200;启动elasticsearch后,可以访问 http://localhost:9200/,查看是否启动成功。

出现这个界面表示启动成功。

简单操作

查看集群状态
curl -XGET 'localhost:9200/_cat/health?v&pretty'
复制代码

集群的节点列表
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
复制代码
建立索引
curl -H "Content-Type: application/json"  -XPUT 'localhost:9200/books?pretty&pretty'
复制代码

列出所有的索引
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
复制代码

删除索引
curl -XDELETE 'localhost:9200/books?pretty&pretty'
复制代码

实现简单查询

查询书价等于11的数据

curl -H 'Content-Type: application/json' -XGET  'localhost:9200/books/_search?pretty' -d'
{"query": {
    "match": {
        "price": 11
       }
    }
 }'
复制代码

Elasticsearch和Node结合使用

创建一个Node.js环境

使用express启动服务。

const express = require('express');
const app = express();
app.get('/', (req, res)=> {
    var responseText = 'Hello world!';
    res.send(responseText);
})
app.listen(3000, ()=> {
    console.log('服务已启动 - 3000');
})
复制代码
安装elasticsearch模块

弹性搜索为Node.js提供一个官方模块,称为elasticsearch;

yarn add elasticsearch
复制代码

然后,你可以在脚本里导入模块,如下所示:

const elasticsearch = require('elasticsearch');
复制代码

使用Node.js建立索引

elasticsearch.js;

...
const elasticsearch = require('elasticsearch');
const esClient = new elasticsearch.Client({
    host: '127.0.0.1:9200',
    log: 'error'
});
const bulkIndex = function bulkIndex(index, type, data) {
let bulkBody = [];

data.forEach(item => {
    bulkBody.push({
        index: {
            _index: index,
            _type: type,
            _id: item.id
        }
    });
    bulkBody.push(item);
});

esClient.bulk({body: bulkBody}).then(response => {
    let errorCount = 0;
    response.items.forEach(item => {
        if (item.index && item.index.error) {
            console.log(++errorCount, item.index.error);
        }
      });
  }).catch(console.err);
};
const test = function test() {
    const books = fs.readFileSync('data.json');
    const book = JSON.parse(books);
    console.log(`${book.length} items parsed from data file`);
    bulkIndex('books', 'book', book);
};
test();
...
复制代码

运行elasticsearch.js,

索引建立成功后,可以使用ElasticSearch Toolbox来查看建立的索引;

好了,今天介绍到这里,下一篇分词查询,未完待续。。。

如果你有更好的处理方式可以留言, 关注微信公众号可查看更多内容。

转载于:https://juejin.im/post/5c0f55166fb9a049fe34fddd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值