在本教程中,我将使用 1000 篇学术论文里的内容,这些内容是根据随机算法逐一生成的,并以 JSON 格式提供,其中的数据格式如下所示:
{
"_id": "57508457f482c3a68c0a8ab3", "title": "Nostrud anim proident cillum non.", "journal": "qui ea", "volume": 54, "number": 11, "pages": "109-117", "year": 2014, "authors": [ { "firstname": "Allyson", "lastname": "Ellison", "institution": "Ronbert", "email": "Allyson@Ronbert.tv" }, ... ], "abstract": "Do occaecat reprehenderit dolore ...", "link": "http://mollit.us/57508457f482c3a68c0a8ab3.pdf", "keywords": [ "sunt", "fugiat", ... ], "body": "removed to save space" }
JSON 格式中的每个字段如字面意思,无需多余解释,但值得注意的是:由于包含随机生成的文章的全部的内容(大概有100~200个段落),所以并未展示,若要获取完整数据,请访问这里.
虽然 Elasticsearch 提供了索引(indexing),更新(updating)、删除(deleting)单个数据的方法,但我们采用批量(bulk)接口导入数据,因为批量接口在大型数据集上执行操作的效率更高。
这里,我们调用函数bulkIndex建立索引,并传入 3 个参数,分别是:索引名 library,类型名library,JSON 数据格式变量 articles。bulkIndex函数自身则通过调用esClient对象的bulk接口实现,bulk 方法包含一个body属性的对象参数,并且每个body属性值是一个包含 2 种操作实体的数组对象。第一个实体是 JSON 格式的操作类型对象,该对象中的index属性决定了操作的类型(本例子是文件索引)、索引名、文件ID。第二个实体则是文件对象本身。
注意,后续可采用同样的方式,为其他类型文件(如书籍或者报告)添加索引。我们还可以有选择的每个文件分配一个唯一的ID,如果不体统唯一的ID,Elasticsearch 将主动为每个文件分配一个随机的唯一ID。
假设你已经从代码库中下载了 Elasticsearch 项目代码,在项目根目录下执行如下命令,即可将数据导入至Elasticsearch中:
$ node index.js
1000 items parsed from data file Successfully indexed 1000 out of 1000 items