小编典典

在所有文档中获取前100个最常用的三个单词短语

elasticsearch

我大约有15,000个抓取的网站,其正文存储在elasticsearch索引中。我需要获得在所有这些文本中使用的前100个最常用的三个词短语:

像这样:

Hello there sir: 203
Big bad pony: 92
First come first: 56
[...]

我是新来的。我研究了术语向量,但它们似乎适用于单个文档。因此,我认为这将是术语向量和聚合与n元语法分析的结合。但是我不知道如何去实现它。任何指针都会有所帮助。

我当前的映射和设置:

{
  "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"
          ]
        }
      }
    }
  }
}

阅读 341

收藏
2020-06-22

共1个答案

小编典典

您正在寻找的被称为 带状疱疹 。带状疱疹就像“单词n-
gram”:字符串中多个项的序列组合。(例如,“我们所有人都生活”,“所有人都生活”,“住在一个”,“一个黄色”,“一个黄色潜水艇”)

在这里看看:https :
//www.elastic.co/blog/searching-with-
shingles

基本上,您需要一个带有带状板分析器的字段,该分析器仅生成三项带状板:

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

"filter_shingle":{
   "type":"shingle",
   "max_shingle_size":3,
   "min_shingle_size":3,
   "output_unigrams":"false"
}

在将带状疱疹分析器应用于相关字段(如博客文章中)并 重新索引数据之后
,您应该能够在字段上发出返回简单术语汇总的查询,body以查看前一百个3 -词词组。

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