2015-05-04 62 views
11

我在想,是否有可能在整个索引或别名中得到Elasticsearch字段中前十个最常用的单词。Elasticsearch字频率和关系

这里是我想要做的事:

从各种文档类型(的Word,PowerPoint,PDF等)提取

我索引的文本文件,这些进行了分析,并存储在一个名为doc_content场。我想知道是否有一种方法可以找到存储在doc_content字段中的特定索引中最常用的单词。

为了让它更清晰,让我们假设我是索引Amazon和eBay的发票。现在我们假设我有来自亚马逊的100张发票和来自ebay的20张发票。让我们假设在每张亚马逊发票中出现两次“亚马逊”一词,并且在每张ebay发票中出现三次“eBay”一词。

现在,有没有办法获得一个聚合类,告诉我在我的索引200次(100发票×2次发生/发票)出现单词“亚马逊”,单词“eBay”出现60次( 20张发票×3次发票/发票)。

我的另一个问题是,如果前者是可能的,那么是否有一种方法可以确定某个单词之后最常出现的单词是什么?

例如:让我们假设我有100个文档。这些文件中有60个包含“老猫”一词,40个包含“老狗”一词,为了争辩,我们假设这些词只在每个文件中出现一次。

现在,如果我们能得到这在我们的情况下,应该是100我们才能确定关系随附后马上有这样的事情的话这个词的频率“老”:

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

回答

3

要获得期限频率,您可以使用term vectors。但是,您首先必须存储它们,其次,您可以仅检索给定文档。

据我所知,不可能聚合​​超过期限的向量。

也许你可以使用脚本字段实现一些你想要的。但是再次说明,由于安全问题,Groovy目前不受欢迎,并且在脚本字段上的聚合可能非常缓慢。

+0

那么你可以更多地讨论使用脚本字段集合字频率:

顺便说一句,以前类似的问题已经被问。由于我的ES群集不公开,安全性不是问题。 –

+0

您可以使用索引时脚本字段自行计算词频。我不认为这是一个好的选择,但它可以工作,如果你只对一小组预定义的关键字感兴趣。 –