title: { type: 'keyword'},
author: { type: 'keyword'},
location: { type: 'integer'},
text: { type: 'text'}
}
returnclient.indices.putMapping({ index, type, body: { properties: schema } })
}
此处为书目索引定义了mapping(映射)。Elasticsearch索引类似于SQL的表或者MongoDB的connection。通过mapping我们可以定义文档每个域和数据类型。Elasticsearch是schema-less,因此技术上说不需要添加mapping,但是通过mapping可以更好控制数据处理方式。
例如,有两个关键词域,分别是“titile”和“author”,文本定为“text”域。这样定义搜索引擎会有完全不同的动作:搜索中,引擎会在text域中查找可能匹配项,而在关键词域则是精确匹配。看起来差别不大,但却对搜索行为和搜索速度有很大影响。
在文件最后输出功能和属性,可以被其它模块访问。
module. exports= {
client, index, type, checkConnection, resetIndex
}
4. 加载源数据
本文使用从Gutenberg项目(一个提供免费电子书的应用)提供的数据。包括100本经典书目,例如《80天环绕地球》、《罗密欧与朱丽叶》以及《奥德赛》等。
4.1 下载书籍数据
本文的数据可以从以下网站下载:
https://cdn.patricktriest.com/data/books.zip,之后解压到项目根目录下的books/ 子目录下。
也可以用命令行实现以上操作:
wgethttps://cdn.patricktriest.com/data/books.zip
unar books.zip
4.2 预览书籍
打开一本书,例如219-0.txt。书籍以公开访问license开始,跟着是书名、作者、发行日期、语言以及字符编码。
Title: Heart of Darkness
Author: Joseph Conrad
ReleaseDate: February 1995[EBook #219]
LastUpdated: September 7, 2016
Language: English
Charactersetencoding: UTF -8
随后是声明信息:*** START OF THIS PROJECT GUTENBERG EBOOK HEART OF DARKNESS ***,紧接着就是书的实际内容。
书的最后会发现书籍结束声明:*** END OF THIS PROJECT GUTENBERG EBOOK HEART OF DARKNESS ***,紧跟着是更加详细的书籍license。
下一步将用编程方法从书中提取元数据,并且从* * *之间将书籍内容抽取出来。
4.3 读取数据目录
本节写一段脚本读取书籍内容添加到Elasticsearch中,脚本存放在server/load_data.js 中。
首先,获得books目录下所有文件列表。
constfs = require( 'fs')
constpath = require( 'path')
constesConnection = require( './connection')
/** Clear ES index, parse and index all files from the books directory */
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-88488-6.html
真牛逼
还说什么别轻举妄动