2015-11-10 237 views
1

我在彈性搜索中有這個模式。彈性搜索過濾器按文檔計數嵌套文檔

79[ 
    'ID' : '1233', 
    Geomtries:[{ 
     'doc1' : 'F1', 
     'doc2' : 'F2' 

    }, 
    (optional for some of the documents) 
    { 
     'doc2' : 'F1', 
     'doc3' : 'F2' 
    }] 
] 

幾何是一個嵌套的元素。 我想獲取所有在幾何圖形中有一個對象的文檔。

到目前爲止已經試過:

"script" : {"script" : "if (Geomtries.size < 2) return true"} 

但我得到異常:沒有這樣的屬性GEOMTRIES

回答

2

如果映射中的字段類型爲nested,則通常接近的doc[fieldkey].values.size()似乎不起作用。我發現下面的腳本工作:

{ 
    "from" : 0, 
    "size" : <SIZE>, 
    "query" : { 
    "filtered" : { 
     "filter" : { 
     "script" : { 
      "script" : "_source.containsKey('Geomtries') && _source['Geomtries'].size() == 1" 
     } 
     } 
    } 
    } 
} 

注:必須使用_source代替doc

+0

該字段是嵌套的,但它沒有工作... – tomas

+0

這次錯誤是什麼?同樣的錯誤? – eemp

+0

它的工作!只需要將[] .change更改爲*** _ source.Geomtries.size()== 1 *** – tomas

1

的問題是在您訪問的字段在你的腳本,使用方法:

doc['Geometry'].size() 
or 
_source.Geometry.size() 

順便說一句,出於性能的原因,我會反規範並添加GeometryNumber字段。您可以使用transform映射來計算索引時間的大小。

+0

我會檢查你的建議謝謝。但它沒有工作 – tomas

+0

'值'是無用的 –