我大约有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" ] } } } } }
您正在寻找的被称为 带状疱疹 。带状疱疹就像“单词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 -词词组。
body
{ "size" : 0, "query" : { "match_all" : {} }, "aggs" : { "three-word-phrases" : { "terms" : { "field" : "body", "size" : 100 } } } }