36

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

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

不过,这似乎是不必要的耗时。有没有办法指示 ElasticSearch 在搜索结果中返回标记化的文本?我浏览了文档并没有找到任何东西。

4

3 回答 3

17

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

在 ElasticSearch 1.0.0 中添加了Term Vector API,它使您可以直接访问 ElasticSearch 在每个文档的底层存储的令牌。API 文档对此不是很清楚(仅在示例中提到),但为了使用 API,您必须首先在映射定义中指出您希望term_vector在每个字段上存储具有属性的术语向量。

于 2014-06-24T15:35:08.510 回答
15

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

  • 允许像 solr TermsComponent一样读取 lucene TermsEnum ,这对于进行自动建议也很有用。请注意,它不会是每个文档,只是索引上的每个词都有词频和文档频率(可能很昂贵,因为有很多独特的词)
  • 如果启用,则允许读取术语向量,就像 solr TermVectorComponent一样。这将是每个文档,但需要存储术语向量(您可以在映射中配置它)并且如果启用还允许检索位置和偏移量。
于 2012-11-15T22:20:48.643 回答
5

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

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"
            }
        }
    }
}'

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

于 2015-08-03T21:33:02.670 回答