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. border --- 透明边框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ARM NEON 64bit 查找表替换

    没啥效果,如果表的长度在 64个uint8_t之类,应该可以提高查表速度,否则还是C来的快 #ifdef HAVE_NEON_AARCH64 void table_lookup_AArch64_neo ...

  3. windows与VMware ubuntu虚拟机实现文件共享

    本文基本摘自:无限挑战者的博客 本人用的系统是win10系统,应该区别不大,实现的是win10系统和VMWare虚拟机Ubantu系统之间的文件共享.到网上找了很多的方法各种各样的方式,由于对Linu ...

  4. 【转】.net中快捷键的使用

    当前行行首:Home 当前行行尾:End 当前文档首行:ctrl+Home 当前文档尾行:ctrl+End 选中当前行: ① 按Home(定位到行首)然后按Shift+Dnd(行尾)   {从行首连选 ...

  5. Data Structure Array: Given an array arr[], find the maximum j – i such that arr[j] > arr[i]

    http://www.geeksforgeeks.org/given-an-array-arr-find-the-maximum-j-i-such-that-arrj-arri/ #include & ...

  6. [原创]java WEB学习笔记06:ServletContext接口

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. python 3 协程函数

    python 3 协程函数 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器 2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yiel ...

  8. P4103 [HEOI2014]大工程

    题目 P4103 [HEOI2014]大工程 化简题目:在树上选定\(k\)个点,求两两路径和,最大的一组路径,最小的一组路径 做法 关键点不多,建个虚树跑一边就好了 \(sum_i\)为\(i\)子 ...

  9. runtime 实现方法交换 viewwillappear方法

    1.新建分类 #import "UIViewController+swizzling.h"#import <objc/runtime.h> @implementatio ...

  10. Docker学习(二)

    docker run ubuntu /bin/echo 'Hello world' docker run -t -i ubuntu /bin/bash docker run  命令运行一个容器 -t ...