2016-09-07 35 views
2

我有大約15,000個抓取的網站,其正文文本存儲在彈性搜索索引中。我需要在所有這些案文所使用的前100名最常用的三個詞的短語:獲取所有文檔中使用最多的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" 
      ] 
     } 
     } 
    } 
    } 
} 

回答

2

你要尋找的被稱爲帶狀皰疹。帶狀皰疹就像「字母n-gram」:串中多於一個術語的串行組合。 (例如:「我們都生活」,「都住在」,「生活在一個」,「黃色」,「黃色潛水艇」)

到這裏看看:https://www.elastic.co/blog/searching-with-shingles

基本上,你需要

彈性博客-後配置但具有:與木瓦分析器生產全權3-術語帶狀皰疹的字段

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

的,所討論(將屋頂板分析儀領域如在後博客文章)和重新索引你的數據,你應該能夠發出一個查詢返回一個簡單的terms aggregation,在你的body字段上看到最多一百個3字的短語。

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

這完美的作品!謝謝彼得! – HyderA

+0

只是一個問題,我如何做一個字段的多個詞組大小。如雙詞短語,四詞短語等?我需要爲每個分析儀創建一個索引嗎? – HyderA

+0

類別。使用單獨的分析器創建單獨的字段,並將正文內容複製到所有字段。然後,您可以在每個專門建造的木瓦場地上進行打分。 –

相關問題