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:/documents //端口
{
"settings":{
"number_of_shards":,
"number_of_replicas":
},
"mappings":{
"suggest":{
"properties":{
"title":{
"type":"text"
},
"content":{
"type":"text"
},
"suggert":{
"type":"completion",
"analyzer":"simple",
"search_analyzer":"simple",
"preserve_separators":true
}
}
}
}
}

8.插入数据如下工具postman

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

9.前端如下:

function searchds(){
let searchs = $("#search").val();
$.get('documents/suggest/'+searchs,function(rs){
console.log(rs.hits.hits[]._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搭建elasticsearch的更多相关文章

  1. 建立一个node.js服务器(使用express搭建第一个Web环境)

    一.官网下载node.js 下载地址:https://nodejs.org/en/download/ 根据向导,下一步安装就可以了! 二.使用express搭建Web环境 express是一个开源的n ...

  2. ELK初学搭建(elasticsearch)

    ELK初学搭建(elasticsearch) elasticsearch logstash kibana ELK初学搭建 elasticsearch 1.环境准备 centos6.8_64 mini ...

  3. 用Express搭建 blog (一)

    Info 公司马上要举行 hack day 了,这次决定和小伙伴用 Express 作为框架来搭建我们的应用,所以昨天搭出来UI后,今天开始系统的学习下 Express. Start 首先是expre ...

  4. express搭建简易web的服务器

    express搭建简易web的服务器 说到express我们就会想到nodejs,应为它是一款基于nodejs平台的web应用开发框架.既然它是基于nodejs平台的框架那么就得先安装nodejs. ...

  5. 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  6. nodejs-使用multer实现多张图片上传,express搭建脚手架

    nodejs-使用multer实现多张图片上传,express搭建脚手架 在工作中,我们经常会看到用户有多张图片上传,并且预览展示的需求.那么在具体实现中又该怎么做呢? 本实例需要nodejs基础,本 ...

  7. express搭建服务器

    学习express搭建node服务器 一.安装express框架 1.了解框架(百度) 2.下载框架 (1)使用npm命令下载 npm install express -g //全局安装,安装的是ex ...

  8. 基于 Express 搭建一个node项目 - 起步

    一,如何基于 Express 搭建一个node项目 什么是Express 借用官方的介绍,Express是一个基于Node.js平台的极简.灵活的web应用开发框架,它提供了一系列强大的特性,帮助你创 ...

  9. [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

随机推荐

  1. PAT 天梯赛 L2-005. 集合相似度 【SET】

    题目链接 https://www.patest.cn/contests/gplt/L2-005 思路 因为集合中的元素 是不重复的 所以用SET 来保存 集合 然后最后 查找一下 两个集合中共有元素 ...

  2. 【leetcode】Balanced Binary Tree

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  3. stm32非操作系统开发和带uCos的开发的区别,及一些解析

    从文件角度来看core_cm4.h和stm32f4xx.h分别从内核寄存器和外设寄存器来定义其地址和结构体,是用c语言访问硬件必须的文件,所以这两个文件不论是否带操作系统,都是必须包含进工程的. re ...

  4. 【Flask】视图高级

    # 视图高级笔记:### `add_url_rule(rule,endpoint=None,view_func=None)`这个方法用来添加url与视图函数的映射.如果没有填写`endpoint`,那 ...

  5. 关于使用unigui、webxone、mysql的几个问题

    一.webxone的问题:1.目前稳定可用的版本好像是v2510:2.设计webxone应用时,窗口的“position”属性只能设置为poDesigned,而且不能动态改变窗口尺寸,否则在浏览器中显 ...

  6. matlab点云处理函数

    1. pcread: 输入文件名,返回pointCloud类(用于存储点云).eg: pcloud = pcread(“filename.ply”) 2. pcshow: 输入pointCloud类, ...

  7. 分享知识-快乐自己:反射机制Demo解析

    Java-Reflect专题 基本反射简介: 1):JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象能够调用它的任意方法和属性;这种动态获取信息以及动 ...

  8. web前端绘制0.5像素的几种方法

    最近完成了公司安排的移动web触屏开发,期间涉及到在移动设备上显示线条,最开始采用PC常用的css board属性来显示1个像素的线条,但是发现在移动设备上并不美观,参考淘宝.京东的触屏发现它们均是采 ...

  9. C++0X 学习之 auto

    auto并不是一个新关键词,是一个把旧关键词赋予新的作用,新的作用修饰变量声明,指示编译器根据变量的初始化表达式推导变量应有的类型.auto 声明的变量必须“在声明处完成初始化”,编译器才可根据初始化 ...

  10. 图的Tarjan算法

    “Tarjan有三种算法 你们知道吗”——Tar乙己 void tarjan(int x) { low[x]=dfn[x]=++ind; q[++top]=x;mark[x]=; for(int i= ...