首先就是存储员工信息数据。这里将会使用一个文档描述一个员工的“employee
document”形式。实际上在ES中存储数据的动作叫index,但是在我们index一个文档的时候首先要确定去哪里储存数据。
在ES中,一个文档是相当于一个type,若干type从属于一个index。可以从下面和关系性数据库的对照关系来理解ES
Relational DB ? Databases ? Tables ? Rows ? Columns
Elasticsearch ? Indices ? Types ? Documents ? Fields
一个ES
cluster包含了若干index,一个index包含了若干type,一个type包含了若干document(行),一个document包含了若干field(列)
各个Index的意义(Index vs Index vs Index)
你也许已经发现了index在ES中以不同的形式出现,表示了不同的含义,所以做一些解释是有必要的
index作为名词:这时相当于关系性数据库,是存储文档的地方,其复数形式是indices或indexes
index作为动词:表示将一个文档数据存入index(名词),就像SQL中的关键字INSERT。
倒置的index(Inverted index):就像关系性数据库指定一个特殊的列作为索引列已提高检索速度一样,ES和Lucene使用了Inverted
index来达到相同的目的。默认情况下,文档中的每个field都是被索引的(也就是说有inverted
index),因此才能被所搜到。一个field如果没有inverted index是不能被所搜的。Inverted
index将会讨论细节。
在employee目录中,将要做如下事情:
1:为每个员工index一个包含其详细信息的document。
2:每个document都是employee这个type的。
3:所有的employee类型都是从属于megacorp这个index的。
4:这个megacorp是在ES cluster中的。
事实上,这个步骤看起来繁琐,其实是很简单的,可以组织所有的动作到一个命令中,如下:
PUT /megacorp/employee/1
{
"first_name":"John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests":["sports","music"]
}
要注意的是/megacorp/employee/1包含了三个部分
megacorp:index的名字
employee:type的名字
1:ID
请求体(JSON)包含了员工的信息,这个很容易看得出来。
简单吧,不需要做任何的前期工作如创建一个index或者给数据指定每个field应该包含数据类型的type。这里就仅仅是直接index一个文档。ES使用默认的配置处理了一切必须要做的事情。
在继续之前可以在向index中添加两条数据如下:
PUT /megacorp/employee/2
{
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": ["music"]
}
PUT /megacorp/employee/3
{
"first_name": "Douglas",
"last_name": "Fir",
"age": 35,
"about": "I like to build cabinets",
"interests": ["forestry"]
}
原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_indexing_employee_documents.html