Elasticsearch /发布和搜索附件

时间:2013-05-24 16:31:52

标签: elasticsearch

我正在尝试让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="
    }
  }
}

2 个答案:

答案 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}