1.首先,我们创建一个Express应用程序!我将使用express.js生成器。

npm install -g express-generator

express ./autocompleter
cd autocompleter npm install

2.让我们准备elasticsearch。下载elasticsearch,并将其解压到文件系统的某个位置。然后运行

cd locationOfElasticsearch
bin/elasticsearch (OR bin/elasticsearch.bat on windows).

3.这样做会使用默认参数初始化elasticsearch(localhost上的端口9200是默认配置,稍后我们将需要它)。

现在,我将把elasticsearch npm包添加到之前创建的express.js应用程序中:

npm install elasticsearch --save  

这将在package.json中添加以下行:

"elasticsearch": "^9.0.2"

4.elasticsearch模块
我将创建一个将在需要时导入的elasticsearch模块。首先,我将在module创建elasticsearch.js:
添加

var elasticsearch = require('elasticsearch');
var elasticClient = new elasticsearch.Client({
host: 'localhost:9200'
}); var indexName = "documents";
function getSuggestions(input) {
return elasticClient.search({
index: indexName,
body: {
query: {
match:{
title: input,
}
}
}
})// .then(function (response) {
// var hits = response.hits.hits;
// console.log(response);
// });
}
exports.getSuggestions = getSuggestions;

5.我现在已经准备好了elasticsearch。转移到Express.js!
首先,我正在为文档路由创建一个端点。我在./routes中创建一个新的文件documents.js,如下所示

var express = require('express');
var router = express.Router(); var elastic = require('../elasticsearch'); /* GET suggestions */
router.get('/suggest/:input', function (req, res, next) {
elastic.getSuggestions(req.params.input).then(function (result) { res.json(result) });
}); /* POST document to be indexed */
router.post('/', function (req, res, next) {
elastic.addDocument(req.body).then(function (result) { res.json(result) });
}); module.exports = router;

6.使用承诺,我将弹性搜索的结果路由到response.json(data)函数。这将直接向用户输出从elasticsearch提供的JSON。

不要忘了把这行添加到app.js(在其他已经定义的路由之后,或者也许是:-))

var documents = require('./routes/documents');
//......
app.use('/documents', documents);

7.创建一个为documents的索引 如下:

127.0.0.1:9200/documents
{
"settings":{
"number_of_shards":4,
"number_of_replicas":2
},
"mappings":{
"suggest":{
"properties":{
"title":{
"type":"text"
},
"content":{
"type":"text"
},
"suggert":{
"type":"completion",
"analyzer":"simple",
"search_analyzer":"simple",
"preserve_separators":true
}
}
}
}
}

8.插入数据如下

127.0.0.1:9200/documents/suggest/1
{
"title":"hit",
"content":"hit",
"suggest":"hit"
}

9.前端如下:

 function searchds(){
let searchs = $("#search").val();
$.get('documents/suggest/'+searchs,function(rs){
console.log(rs.hits.hits[0]._source);
})
} <form class="navbar-form navbar-left" id="searchForm" role="search">
<div class="form-group">
<input type="text" id="search" name="search" class="form-control" placeholder="Search">
</div>
<button type="button" class="btn btn-default" onclick="searchds()">搜索</button>
</form>

第四篇 express 安装esasticsearch的更多相关文章

  1. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  2. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  3. IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构(转载)

    IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构 系列文章链接: IIS负载均衡-Application Request Route详解第一篇: ...

  4. 【OpenCV第一篇】安装OpenCV

    [OpenCV第一篇]安装OpenCV 本篇主要介绍如何下载OpenCV安装程序,如何在VS2008下安装配置OpenCV,文章最后还介绍了一个使用OpenCV的简单小例子. <OpenCV入门 ...

  5. Express安装入门与模版引擎ejs

    Express安装入门与模版引擎ejs 目录 前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set ...

  6. node Express安装与使用(一)

    首先放上官网地址 http://www.expressjs.com.cn/ 学会查阅官方手册,它是最好的资料. 1.Express安装 首先确定你已经安装了 Node.js,然后去你创建的项目目录下( ...

  7. JDFS:一款分布式文件管理系统,第四篇(流式云存储续篇)

    一 前言 本篇博客是JDFS系列博客的第四篇,从最初简单的上传.下载,到后来加入分布式功能,背后经历了大量的调试,尤其当实验的虚拟计算结点数目增加后,一些潜在的隐藏很深的bug就陆续爆发.在此之前笔者 ...

  8. ElasticSearch入门 第四篇:使用C#添加和更新文档

    这是ElasticSearch 2.4 版本系列的第四篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  9. nodejs备忘总结(一) -- node和express安装与配置,新建简单项目(附安装配置过程中遇到问题的解决方法)

    安装node 本文以安装node_v8.9.0为例(win10环境),下载node-v8.9.0-x64.msi插件 下载后,安装,安装目录默认为C:\Program Files\nodejs 配置环 ...

随机推荐

  1. php 图片下载

    php图片保存.下载 <?php //获取图片2进制内容 ,可以保存入数据库 $imgStr = file_get_contents('http://.../1.jpg'); //保存图片 $f ...

  2. 牛客练习赛13 B 幸运数字Ⅱ 【暴力】【二分】

    题目链接 https://www.nowcoder.com/acm/contest/70/B 思路 没有代码限制 先打表 打出 幸运数字的表 然后 二分查找 第一个 大于 r 的幸运数字 然后 往 L ...

  3. leetcode 1049 Last Stone Weight II(最后一块石头的重量 II)

    有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那么 ...

  4. javascript箭头函数把函数给简写了[0403]

    箭头函数把函数给简写了[0403]        我不是很喜欢箭头函数,总觉得它让原本就不那么严谨的js更加不严谨了,所以有时候看js程序也是一件很头痛的事情,不过在ES6中加入了这么一个新的方法,已 ...

  5. Google员工自述:在哈佛教书和在Google工作的差别

    感谢伯乐在线的投递编者按:2003年到2010年期间,原文作者Matt Welsh 是哈佛大学工程和应用科学学院的计算机科学系教授.2010年加入Google,是一名高级工程师.他当前的工作重点是广域 ...

  6. Oracle角色管理

    --创建角色 create role role_name [not identified |--无需验证的方式 identified by [password]--密码验证的方式 | identifi ...

  7. mybatis学习(四)

    创建mybatis工程 工程目录: 具体步骤: 1.创建sqlMapConfig.xml文件,配置mybatis的运行环境,事物,数据源,加载mapper映射文件等. 2.创建po类(查询或者返回的属 ...

  8. php数据结构课程---2、链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的))

    php数据结构课程---2.链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的)) 一.总结 一句话总结: php是弱类型语言,变量即可表示数值,也可表示对象:链表节点的数据域的值就 ...

  9. IBatis笔记

    dynamic可以去除第一个prepend="and"中的字符(这里为and),从而可以帮助你实现一些很实用的功能 ibatis的remapResults属性在查询列发生变化,直接 ...

  10. hdu 4514 湫湫系列故事――设计风景线(求树的直径)

    随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好.  现在已经勘探确定了n个位置 ...