从ElasticSearch文档中检索分析的标记

时间:2012-11-15 19:28:51

标签: text elasticsearch tokenize

尝试访问我的ElasticSearch文档中的分析/标记化文本。

我知道您可以使用Analyze API根据您的分析模块分析任意文本。因此,我可以将文档中的数据复制并粘贴到Analyze API中,以查看它是如何标记化的。

但是,这似乎不必要地耗费时间。有没有办法指示ElasticSearch在搜索结果中返回标记化文本?我查看了文档但没有找到任何内容。

3 个答案:

答案 0 :(得分:16)

这个问题很老了,但也许我认为还需要一个额外的答案。

使用ElasticSearch 1.0.0添加了Term Vector API,这使您可以在每个文档的基础上直接访问令牌ElasticSearch存储。 API文档在此方面不是很清楚(仅在示例中提到),但为了使用API​​,您必须先在mapping definition中指明要使用term_vector存储术语向量每个领域的财产。

答案 1 :(得分:15)

看看其他答案:elasticsearch - Return the tokens of a field。不幸的是,它需要使用提供的脚本动态重新分析您的字段内容 应该可以编写一个插件来公开这个功能。我们的想法是将两个端点添加到:

  • 允许像solr TermsComponent那样读取lucene TermsEnum,对于自动建议也很有用。请注意,它不是每个文档,只是索引上的每个术语都有术语频率和文档频率(可能很多,有很多独特的术语)
  • 允许读取术语向量(如果已启用),就像solr TermVectorComponent一样。这将是每个文档,但需要存储术语向量(您可以在映射中配置它),并允许在启用时检索位置和偏移。

答案 2 :(得分:6)

您可能希望使用脚本,但是您的服务器应该启用脚本。

curl 'http://localhost:9200/your_index/your_type/_search?pretty=true' -d '{
    "query" : {
        "match_all" : { }
    },
    "script_fields": {
        "terms" : {
            "script": "doc[field].values",
            "params": {
                "field": "field_x.field_y"
            }
        }
    }
}'

允许脚本的默认设置取决于弹性搜索版本,因此请从官方文档中查看。