2B铅笔水果橡皮

对不同类型的文档,pdf xml等内容进行索引是一个常用的功能,es对此提供了支持。

1:attachment type

同其他的core type一样,attachment type用来支持对文档的索引(base64编码)。attachment type是用插件的方式提供的。

注意:目前attachment还在实验阶段。不过还是可用的。

attachment的使用是非常简单的,mapping中设置类型为attachment即可。

{

"person" : {

"properties" : { "my_attachment" : { "type" : "attachment"} }

}

}

index过程:

{ "my_attachment" : "……base64 encoded attachment……"}

也可以通过更加详尽的设置:

{

"my_attachment" : {

"_content_type" : "application/pdf",

"_name" : "resource/name/of/my.pdf"

"content" : "……base64 encoded attachment……"

}

}

attachment type仅仅索引doc的内容,而且自动添加元数据信息(前提是可用)。元数据信息支持:date,title,author 和 keyword。对元数据信息也提供了查询,采用如下格式my_attachment.author。

无论是meta data还是 content都是简单个core type(string , date….)。所以,都可以在mapping中配置。比如

{

"person" : {

"properties" : {

"file" : {

"type" : "attachment",

"fields" : {

"file" : { "index" : "no" },

"date" : { "store" : true },

"author" : { "analyzer" : "myAnalyzer"}

}

}

}

}

}

上边这个mapping,,实际doc的内容索引到字段file中,但是我们并不存储它,因此只能通过_all访问。

2:attachment plugin

es对attachment的支持是通过elasticsearch-mapper-attachment来实现的,内部使用了apache tika。

具体介绍可以参考github上的链接:https://github.com/elasticsearch/elasticsearch-mapper-attachments

因此,如果需要设置attachment类型就需要安装plugin。网络上很多介绍安装的方式,基本都是采用

bin/plugin -install的方式安装。这也是es插件通用的安装方式,比如head bigdesk marvel等。但是elasticsearch-mapper-attachment的安装经常会报错,可能是dns的问题,也可能是git上是sourcecode,而不是现成的jar包。因此,如果命令不可用,可以直接将jar包和tika的jar包放到lib下,或者放到已经设置过的plugin目录下即可。注意版本问题。

参考链接:

3:Attachment Type in Action

Mapping:

String idxName = "test";String idxType = "attachment";XContentBuilder map = jsonBuilder().startObject().startObject(idxType).startObject("properties").startObject("file").field("type", "attachment").startObject("fields").startObject("title").field("store", "yes").endObject().startObject("file").field("term_vector","with_positions_offsets").field("store","yes").endObject().endObject().endObject().endObject().endObject();

Create index and put mapping:

CreateIndexResponse resp = client.admin().indices().prepareCreate(idxName).setSettings(ImmutableSettings.settingsBuilder().put("number_of_shards", 1).put("index.numberOfReplicas", 1)).addMapping("attachment", map).execute().actionGet();assertThat(resp.acknowledged(), equalTo(true));自己不喜欢的人,可以报之以沉默微笑;

2B铅笔水果橡皮

相关文章:

你感兴趣的文章:

标签云: