【问题标题】:Elasticsearch word frequency and relationsElasticsearch 词频和关系
【发布时间】:2015-07-13 10:32:09
【问题描述】:

我想知道是否有可能在整个索引或别名的 Elasticsearch 字段中获取前十个最常用的词。

这是我想要做的:

我正在索引从各种文档类型(Word、Powerpoint、PDF 等)中提取的文本文档,这些文档被分析并存储在一个名为 doc_content 的字段中。我想知道是否有办法找到存储在 doc_content 字段中的特定索引中最常见的词。

为了更清楚,假设我正在索引亚马逊和 eBay 的发票。现在假设我有 100 张来自亚马逊的发票和 20 张来自 ebay 的发票。我们还假设“amazon”一词在每张亚马逊发票中出现两次,而“ebay”一词在每张 ebay 发票中出现 3 次。

现在,有没有一种方法可以得到一个汇总的排序结果,它告诉我“amazon”这个词在我的索引中出现了 200 次(100 个发票 x 2 次出现/发票),而“ebay”这个词出现了 60 次(20发票 x 3 次/发票)。

我的另一个问题是,如果前者是可能的,那么有没有办法确定在某个词之后出现的最频繁的词是什么?

例如:假设我有 100 个文档。这些文档中有 60 个包含术语“Old Cat”,40 个包含术语“Old Dog”,为了论证,我们假设这些词在每个文档中只出现一次。

现在,如果我们可以得到单词“old”的频率,在我们的例子中应该是 100。那么我们是否可以确定与紧随其后的单词的关系是这样的:

               __________ Cat (60)
              |
Old (100)-----|
              |__________ Dog (40)

【问题讨论】:

    标签: elasticsearch frequency tf-idf


    【解决方案1】:

    要获取词频,您可以使用term vectors。但是,您首先必须存储它们,其次,您只能为给定的文档检索它们。

    据我所知,不可能对词向量进行聚合。

    也许您可以使用脚本字段实现一些您想要的。但话又说回来,Groovy 目前由于安全问题而不受青睐,并且在脚本字段上进行聚合可能非常慢。

    顺便提一下,之前也有人问过类似的问题:

    【讨论】:

    • 您能否详细说明使用脚本字段来聚合词频。安全不是问题,因为我的 ES 集群不是公共的。
    • 您可以使用索引时间脚本字段自己计算词频。我认为这不是一个好的选择,但如果您只对一小组预定义的关键字感兴趣,它可能会起作用。
    猜你喜欢
    • 2015-09-13
    • 2015-11-18
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多