elasticsearch 获取所有文档中使用最多的前100个三字短语,elasticsearch,indexing,lucene,elasticsearch,Indexing,Lucene" /> elasticsearch 获取所有文档中使用最多的前100个三字短语,elasticsearch,indexing,lucene,elasticsearch,Indexing,Lucene" />

elasticsearch 获取所有文档中使用最多的前100个三字短语

elasticsearch 获取所有文档中使用最多的前100个三字短语,elasticsearch,indexing,lucene,elasticsearch,Indexing,Lucene,我有大约15000个网站,它们的正文存储在弹性搜索索引中。我需要获得所有这些文本中使用最多的前100个三字短语: 大概是这样的: Hello there sir: 203 Big bad pony: 92 First come first: 56 [...] 我是新来的。我研究了术语向量,但它们似乎适用于单个文档。所以我觉得这将是一个结合了术语向量和聚合与n-gram分析的排序。但我不知道如何实施这一点。任何提示都会有帮助 我的当前映射和设置: { "mappings": { "i

我有大约15000个网站,它们的正文存储在弹性搜索索引中。我需要获得所有这些文本中使用最多的前100个三字短语:

大概是这样的:

Hello there sir: 203
Big bad pony: 92
First come first: 56
[...]
我是新来的。我研究了术语向量,但它们似乎适用于单个文档。所以我觉得这将是一个结合了术语向量和聚合与n-gram分析的排序。但我不知道如何实施这一点。任何提示都会有帮助

我的当前映射和设置:

{
  "mappings": {
    "items": {
      "properties": {
        "body": {
          "type": "string",
          "term_vector": "with_positions_offsets_payloads",
          "store" : true,
          "analyzer" : "fulltext_analyzer"
         }
      }
    }
  },
  "settings" : {
    "index" : {
      "number_of_shards" : 1,
      "number_of_replicas" : 0
    },
    "analysis": {
      "analyzer": {
        "fulltext_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": [
            "lowercase",
            "type_as_payload"
          ]
        }
      }
    }
  }
}

你要找的是木瓦。木瓦就像“单词n-grams”:一个字符串中多个术语的连续组合。(例如,“我们都住在”、“都住在”、“住在一艘”、“在一艘黄色的潜艇里”、“在一艘黄色的潜艇里”)

请看这里:

基本上,您需要一个具有木瓦分析器的字段,该分析器只生成3项木瓦:

弹性博客文章配置,但具有:

在将shingle analyzer应用到所讨论的字段(如博客文章中所述)并对数据重新编制索引后,您应该能够发出一个查询,返回一个简单的
正文
字段,以查看前100个3字短语

{
  "size" : 0,
  "query" : {
    "match_all" : {}
  },
  "aggs" : {
    "three-word-phrases" : {
      "terms" : {
        "field" : "body",
        "size"  : 100  
      }
    }
  }
}

只有一个问题,我如何在一个字段中使用多个短语大小。比如两个词的短语,四个词的短语,等等?我需要为每个分析器创建一个索引吗。使用单独的分析器创建单独的字段,只需将正文内容复制到所有字段。然后你可以对每个专门构建的木瓦字段进行切面。我让它在一个索引上使用多个分析器、过滤器和多个字段,就像这样:但完成查询大约需要6分钟。因此需要对此进行调整。索引可能需要一段时间(取决于集合的大小),但该查询应该会在一秒钟左右返回。有了15000个站点,我想你可能会有一个巨大的(内容)站点,每个站点都有几十万个木瓦。如果查询本身的速度确实很慢,请在更大的机器上尝试一个新集群(优先考虑内存和本地SSD存储)。您可能只是在可用物理内存太少的情况下进行交换。
{
  "size" : 0,
  "query" : {
    "match_all" : {}
  },
  "aggs" : {
    "three-word-phrases" : {
      "terms" : {
        "field" : "body",
        "size"  : 100  
      }
    }
  }
}