2012-11-01 91 views
1

我有一個如下所示的索引文檔結構;在elasticsearch的子文檔中搜索term

{ 
    "term":"some term", 
    "inlang":"some lang" 
    "translations" : { 
     { 
      "translation":"some translation", 
      "outlang":"some lang", 
      "translations" : { 
       { 
        "translation":"some translation 1" 
        "outlang": "some lang 1" 
        "translations" : {...} 
       } 
      } 
     }, 
     ... 
    } 
} 

我想在這些文件中找到翻譯。但是,此翻譯可以存在於本文檔的任何級別。是否有可能通過使用elasticsearch動態地搜索術語?

例如,提前

{ 
    "query": { 
     "*.translation":"searchterm" 
    } 
} 

感謝

回答

5

我已經設法做到以下查詢;

{ 
    "query": { 
    "query_string": { 
     "query": "someterm", 
     "fields": ["*.translation"] 
    } 
    } 
} 

{ 
    "query": { 
    "multi_match": { 
     "query": "someterm", 
     "fields": ["*.translation"] 
    } 
    } 
} 

你可以看到elasticsearch谷歌羣組會話的here

0

不,我不相信這個功能被內置到ElasticSearch的時刻。這個答案建議you could build the functionality with a script,但它會超慢。

一般來說,ES並不能很好地嵌套數據。它支持嵌套字段,但許多更高級的搜索功能無法在複雜的嵌套數據上運行。我的建議是對數據進行非規範化處理,以便每個翻譯都由索引中的單個項目表示,並使用ID號將它們鏈接起來。

+0

感謝您的回覆,我已經成功地做到這一點正如我上面提到構造查詢。你可以看到我的答案和谷歌小組對話 –