2015-10-27 185 views
1

對於我的母語,我使用Elasticsearch來衡量句子,段落和文檔對索引其餘部分的重要性。我使用了3個不同的索引來實現快速查詢。一切工作正常,但我想評估是否甚至possibe做同樣的嵌套對象或父子關係。Elasticsearch嵌套對象的重要術語

在這裏,我嘗試建立與nestd對象查詢顯著方面:

PUT /test_nested 
{ 
    "settings": { 
     "analysis": { 
     "filter": { 
      "german_stop": { 
      "type":  "stop", 
      "stopwords": "_german_" 
      }, 
      "german_keywords": { 
      "type":  "keyword_marker", 
      "keywords": [""] 
      }, 
      "german_stemmer": { 
      "type":  "stemmer", 
      "language": "light_german" 
       }, 
       "shingle_bigram": { 
        "type":  "shingle", 
        "max_shingle_size": 2, 
        "min_shingle_size": 2, 
        "output_unigrams": false 
       }, 
       "shingle_trigram": { 
        "type":  "shingle", 
        "max_shingle_size": 3, 
        "min_shingle_size": 3, 
        "output_unigrams": false      
       } 
     }, 
     "analyzer": { 
      "unigram": { 
      "tokenizer": "standard", 
      "filter": [ 
       "lowercase", 
       "german_stop", 
       "german_keywords", 
       "german_normalization", 
       "german_stemmer" 
      ] 
      } 
     } 
     } 
    }, 
    "mappings": { 
    "document": { 
     "properties": { 
     "tags" : { 
      "type" : "string", 
      "analyzer" : "unigram", 
      "index" : "analyzed" 
     }, 
     "publishDate" : { 
      "type" : "date" 
     }, 
     "paragraphs": { 
      "type": "nested", 
      "properties": { 
      "sentences" :{ 
       "type" : "nested", 
       "properties": { 
       "textBody": { 
        "type": "string", 
        "analyzer" : "unigram", 
        "index" : "analyzed", 
        "term_vector" : "with_positions_offsets", 
       "term_statistics" : true 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

和2測試文檔:

PUT /test_nested/document/1 
{ 
    "tags" : "DerSpiegel, Frankfurt", 
    "publishDate" : "2005-12-11", 
    "paragraphs" : [ 
    { 
     "sentences" : [ 
     {"textBody" : "Größter anzunehmender Einschlag"}, 
     {"textBody": "Es gibt ziemlich blöde Vorurteile über Fußball."}, 
     {"textBody": "Eines lautet: Der Ball ist rund."}, 
     {"textBody": "Freitagabend, Messehalle 1 in Leipzig, die Auslosung zur Fußballweltmeisterschaft: Der Ball ist gar nicht rund."} 
     ] 
    } 
    ] 
} 

PUT /test_nested/document/2 
{ 
    "tags" : "DerSpiegel, Frankfurt", 
    "publishDate" : "2005-12-11", 
    "paragraphs" : [ 
    { 
     "sentences" : [ 
     {"textBody" : "Dafür aber kann man mit so einem Ball auch viel mehr anstellen als mit diesen runden, kleinen Dingern, die früher aus Leder waren und heute aus Polyurethan sind."}, 
     {"textBody": "Zum Beispiel die gigantischste Fußball-WM-Auslosungsshow aller Zeiten zelebrieren."}, 
     {"textBody": "Eine Show, die zum globalen Fußball passt."}, 
     {"textBody": "Hauptsache riesig - wen interessiert schon rund?"} 
     ] 
    }, 
    { 
     "sentences" : [ 
     {"textBody" : "Mit der Verteilung der 32 Teams auf ihre acht Gruppen bekamen die Deutschen damit erstmals auch einen Vorgeschmack auf das Gewicht und die Wucht der WM im nächsten Jahr." }, 
     {"textBody" : "Mag die Nachricht des Abends auch gewesen sein, dass Deutschland gegen Costa Rica, Polen und Ecuador spielt und dass im Achtelfinale die Engländer drohen, die Botschaft des Spektakels von Leipzig heißt, dass die WM mit einer Opulenz über das Land kommen wird, von der sich die Deutschen bisher noch gar keine rechte Vorstellung gemacht haben." }, 
     {"textBody" : "Die Stimme von 1974 gehörte Wolfhard Kuhlins, Sportchef des HR, und das Weltereignis war nach 45 Minuten ausgestrahlt, nicht nach 150." }, 
     {"textBody" : "Zwar kam auch schon Franz Beckenbauer zum Interview ins Studio, aber selbst der Kaiser war noch nicht, was er mal wurde: Zum schwarzen Anzug trug er weiße Socken." } 
     ] 
    } 
    ] 
} 

不幸的是我沒有得到以下查詢的任何顯著條款:

GET test_nested/document/_search?search_type=count 
{ 
    "query" : { 
    "match_all" :{} 
    }, 
    "aggs" :{ 
     "sentences":{ 
     "nested" :{ 
      "path" : "paragraphs.sentences" 
     } 
     }, 
     "aggs" : { 

      "significant_terms" : { 
       "chi_square": {}, 
       "field" : "paragraphs.sentences.textBody" 
      } 

     } 
    } 
} 

回答

2

你剛剛有一個語法錯誤,基本上。這似乎是你想要做什麼:

POST test_nested/document/_search?search_type=count 
{ 
    "query": { 
     "match_all": {} 
    }, 
    "aggs": { 
     "sentences": { 
     "nested": { 
      "path": "paragraphs.sentences" 
     }, 
     "aggs": { 
      "sentances_sig_terms": { 
       "significant_terms": { 
        "chi_square": {}, 
        "field": "paragraphs.sentences.textBody" 
       } 
      } 
     } 
     } 
    } 
} 

下面是一些代碼我用來測試它:

http://sense.qbox.io/gist/e53122ea5887bf48a9bab570ad1c63546494026d

非常精心編寫的問題,順便說一句。

+0

糟糕,只是注意到了其他答案。他們先到這裏。 :) –

1

你的問題是你有一個嵌套對象內嵌套的對象。我不確定這是否是有意的,或者您只給我們一小部分數據來做最少的測試。

爲什麼我這麼說?由於查詢中只有一個nested類型聚合,因此應該單獨處理這些聚合。另外 - 您的significant_terms彙總沒有名稱。總結一下:

  1. 我拆你的nested聚集成兩個
  2. 都給significant_terms聚集的名稱
  3. 利潤?

有您的查詢:

POST test_nested/document/_search?search_type=count 
{ 
    "aggs": { 
    "paragraphs": { 
     "nested": { 
     "path": "paragraphs" 
     }, 
     "aggs": { 
     "sentences": { 
      "nested": { 
      "path": "paragraphs.sentences" 
      }, 
      "aggs": { 
      "Significants": { 
       "significant_terms": { 
       "chi_square": {}, 
       "field": "paragraphs.sentences.textBody" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

而且這裏是你的結果(我用你提供的測試數據):

{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 2, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "paragraphs": { 
     "doc_count": 3, 
     "sentences": { 
      "doc_count": 12, 
      "Significants": { 
       "doc_count": 12, 
       "buckets": [ 
        { 
        "key": "rund", 
        "doc_count": 4, 
        "score": 2.1794871794871793, 
        "bg_count": 4 
        }, 
        { 
        "key": "ball", 
        "doc_count": 3, 
        "score": 1.5178571428571428, 
        "bg_count": 3 
        }, 
        { 
        "key": "wm", 
        "doc_count": 3, 
        "score": 1.5178571428571428, 
        "bg_count": 3 
        }, 
        { 
        "key": "fussball", 
        "doc_count": 3, 
        "score": 1.5178571428571428, 
        "bg_count": 3 
        } 
       ] 
      } 
     } 
     } 
    } 
} 

讓我知道這是你需要的東西。