想象一下,我們有這個簡單的實體ES其父實體的價值Elasticsearch
user {
username: "ultrauser"
name: "Greg"
address: [
{ city: "London" }, {city: "Prague" }
]
}
我需要一個查詢,這將返回我的所有addreses用戶「ultrauser」。
我正在使用NEST,現在我按照我選擇用戶的方式輸入用戶名=「ultrauser」,然後自己只讀取地址字段。所以ES將返回給我整個用戶實體,其中也包含地址。
但ES有可能讓查詢像「給我所有地址,屬於用戶'超級用戶'」?
我需要ES返回地址實體列表,而不是包含地址的用戶實體。從根到葉(獲取user.address.city)很簡單,但我怎樣才能輕鬆地從樹葉選擇根?
重要的是,由於其他原因,我們不能使用父子或嵌套文檔功能。
感謝您的所有想法。
是的,我需要它變小。我創建了這個簡單的示例,因爲用戶包含更多的字段,並且當我只需要一個字段時,獲取整個用戶是沒有意義的。我會嘗試你的建議並讓你知道(並標記答案)。但是這可能需要一些時間,因爲我使用通用NEST,所以我必須重寫查詢。謝謝 –
只有一個問題 - 爲什麼我應該使用過濾器呢?如果我想要一個特定的地址,屬於用戶「超級用戶」,那麼我可以輕鬆地爲用戶進行查詢,在字段「地址」上設置過濾器,然後說我只希望返回字段「地址」。但它將包含所有用戶的地址,我必須再次應用過濾器(使用linq或其他)。我只會知道,所需的地址是結果中的某個地方。 –
@MartinPotvrzenejBrabec你真的不是。我只是展示了一個稍微複雜的例子,如果你正在尋找多個用戶,你想過濾掉那些沒有地址的用戶。或者讓我們假設你正在查詢其他一些值(比如向我展示某個城市的所有地址或其他值)。這個答案的重要部分是最後的「字段」節 –