【问题标题】:Retrieve analyzed tokens from ElasticSearch documents从 ElasticSearch 文档中检索分析的令牌
【发布时间】:2012-11-04 11:28:10
【问题描述】:

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

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

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

【问题讨论】:

  • 我尝试同时分析 api 和术语向量,发现术语向量实际上更复杂 b/c 解析其结果比解析分析 api 结果更耗时。我想知道自从您提出这个问题以来,您是否获得了更多的见解?

标签: text elasticsearch tokenize


【解决方案1】:

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

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

【讨论】:

  • 通过我的测试,我发现分析术语向量比仅检查分析 api 结果更耗时。
【解决方案2】:

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

  • 允许像 solr TermsComponent 那样读取 lucene 术语枚举,这对于进行自动建议也很有用。请注意,它不会是每个文档,而是索引上的每个词都有词频和文档频率(可能会因为很多独特的词而变得昂贵)
  • 如果启用,则允许读取术语向量,就像 solr TermVectorComponent 所做的那样。这将是每个文档,但需要存储术语向量(您可以在映射中配置它),如果启用,还允许检索位置和偏移量。

【讨论】:

  • 我也需要第一个案例,但我不关心频率,我只想要一个列表——所以我的计划只是遍历字段数据缓存(比如常规术语方面确实如此)但没有收集计数。我有一个部分编写的插件。
  • 干得好,能在github上分享就更好了! :)
  • 如果你指的是我——是的,我会在完成后,在这里:github.com/ptdavteam/elasticsearch-approx-plugin
  • 我们现在已经为该插件添加了一个 TermList facet。它仍然有点实验性。如果您有机会尝试,我会对任何反馈感兴趣。
  • 很好,我去看看。另一方面,我什至没有机会开始研究我的想法……太糟糕了!
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多