0

我试图让 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=
    }
}

该文件的内容是:

我喜欢汉堡包和热狗,但主要是巧克力。

你好世界。

第一个问题是,该文档的索引是否正确?如果是这样,我该如何搜索该文档的内容?运行此查询不返回任何结果:

{
  "query": {
    "query_string": {
      "query": "hamburgers"
    }
  }
}

但这会返回文档。

{
  "query": {
    "query_string": {
      "query": "SSBsaWtlIGhhbWJ1cmdlcnMgYW5kIGhvdGRvZ3MsIGJ1dCBtb3N0bHkgY2hvY29sYXRlLg0KDQpIZWxsbyB3b3JsZC4="
    }
  }
}
4

2 回答 2

5

默认情况下不支持对二进制内容进行索引。你必须安装和使用mapper-attachment 插件。这将启用attachment您可以在映射中使用的自定义类型。这样,elasticsearch 将使用 apache tika 从二进制文件中提取文本并将其索引为文本。只有在那之后,您才能通过文本查询获得结果。

请考虑使用附件插件,您正在服务器端执行二进制内容的解析,在弹性搜索节点内,这可能不是一个好主意,因为您必须在该节点上为此保留电源和内存进程而不是使用它来索引和搜索文本。

于 2013-05-24T19:29:36.730 回答
0

在http://elasticwarehouse.org有一个替代解决方案 - 插件。您可以使用 _ewupload 上传二进制文件吗?然后使用“filetext”或“filemeta”元素通过 elasticwarehousestorage 索引执行搜索

安装插件:

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}

搜索示例:

curl -XGET "http://127.0.0.1:9200/elasticwarehousestorage/files/_search" -d '{
"query": {
    "term": {
       "filetext": {
          "value": "hamburgers"
       }
    }
}
}'
于 2015-10-12T11:44:31.573 回答