我最近尝试为Elastic Search测试mapper-attachments插件。
以下是我在Elastic中的基本映射:
PUT /test
PUT /test/docs/_mapping
{
"docs": {
"properties": {
"file": {
"type": "attachment",
"fields": {
"content": {
"term_vector":"with_positions_offsets",
"store": true
}
}
}
}
}
}
我正在使用Python的Elasticsearch Client,以下示例假设:
import base64
from elasticsearch import Elasticsearch
es = Elasticsearch()
当我自己编码一个字符串时,没关系:
encoded = base64.b64encode(b'Encoding Test')
es.index(index='test',
doc_type='docs',
id=1,
refresh='true',
body={
'file' : {
"_content": encoded,
"_indexed_chars" : -1
}
})
我也尝试索引pdf文件,也可以正常工作 但是,当我尝试使用Microsoft Office Document(OpenXML)时,如pptx或docx,文件的内容似乎没有被编入索引:
file_path = "docx/test.docx"
with open(file_path, "rb") as docx_file:
es.index(index='test', doc_type='docs', id=2, refresh='true', body={
'file' : {
"_content": base64.b64encode(docx_file.read()),
"_indexed_chars" : -1
}
})
我尝试了很多Word和Powerpoint文件,没有成功。
当我通过解压缩文件手动提取文本时,从XML中提取文本并使用base64重新编码此文本它是否正常工作,但是使用map-attachments插件(Apache Tika)执行此操作的重点是什么?对我来说似乎很奇怪。
你有什么发生的线索吗?我错过了一步吗?
Python:3.4
弹性搜索:2.2.0
插件:映射器附件
在我的笔记本电脑上(Mac OS X v 10.11.3)