我正在尝试让Elasticsearch索引.txt文件,以便我可以搜索内容。我已经取得了一些进展,但在搜索部分没有运气。
这是我的映射:
mappings: {
file: {
properties: {
allow_token_share: {
type: string
},
file: {
type: string
},
deny_token_document: {
type: string
},
_name: {
type: string
},
_content_type: {
type: string
},
type: {
type: string
},
uri: {
type: string
},
deny_token_share: {
type: string
},
allow_token_document: {
type: string
}
}
}
}
这是我编入索引的文件:
{
_index: f_drive,
_type: file,
_id: file:/C:/Users/ttobinca.EPIC/Documents/Dev/Epicsearch/TestDocs/Test.txt,
_version: 1,
_score: 1,
_source: {
uri: C:\Users\ttobinca.EPIC\Documents\Dev\Epicsearch\TestDocs\Test.txt,
allow_token_document: __nosecurity__,
deny_token_document: __nosecurity__,
allow_token_share: __nosecurity__,
deny_token_share: __nosecurity__,
type: attachment,
_content_type: text/plain,
_name: Test.txt,
file: SSBsaWtlIGhhbWJ1cmdlcnMgYW5kIGhvdGRvZ3MsIGJ1dCBtb3N0bHkgY2hvY29sYXRlLg0KDQpIZWxsbyB3b3JsZC4=
}
}
该文件的内容是:
我喜欢汉堡包和热狗,但主要是巧克力。
Hello world。
第一个问题是,这个文件索引是否正确? 如果是这样,我该如何搜索本文档的内容?运行此查询不会返回任何结果:
{
"query": {
"query_string": {
"query": "hamburgers"
}
}
}
但是这会返回文档。
{
"query": {
"query_string": {
"query": "SSBsaWtlIGhhbWJ1cmdlcnMgYW5kIGhvdGRvZ3MsIGJ1dCBtb3N0bHkgY2hvY29sYXRlLg0KDQpIZWxsbyB3b3JsZC4="
}
}
}
答案 0 :(得分:5)
默认情况下不支持索引二进制内容。你必须安装和使用mapper-attachment plugin。这将启用您可以在映射中使用的自定义attachment
类型。这样,elasticsearch将使用apache tika从二进制文件中提取文本并将其作为文本索引。只有在那之后,您才能通过文本查询获得结果。
请注意使用附件插件,您正在弹性搜索节点内执行服务器端二进制内容的解析,这可能不是一个好主意,因为那时您必须保留电源和内存该进程的节点,而不是用于索引和搜索文本。
答案 1 :(得分:0)
还有另一种解决方案 - http://elasticwarehouse.org的插件。您可以使用_ewupload上传二进制文件吗?然后使用" filetext"通过elasticwarehousestorage index执行搜索。或" filemeta"元素
安装插件:
protected void onActivityResult
重新启动群集,然后:
plugin -install elasticwarehouseplugin -u http://elasticwarehouse.org/elasticwarehouse/elasticsearch-elasticwarehouseplugin-1.2.2-1.7.0-with-dependencies.zip
示例回复:
curl -XPOST "http://127.0.0.1:9200/_ewupload?folder=/myfolder&filename=Test.txt" --data-binary @Test.txt
搜索示例:
{"id":"nWvrczBcSEywHRBBBwfy2g","version":1,"created":true}