2012-01-13 70 views
1

中提取收集的財產我使用RavenDB和我有麻煩提取使用Lucene的查詢特定值。如何根文檔

這裏是我的文檔中的JSON:

{ 
"customer" : "my customer" 
"locations": [ 
    { 
     "name": "vel arcu. Curabitur", 
     "settings": { 
     "enabled": true 
     } 
    } 
    ] 
} 

這裏是我的查詢:

var list = session.Advanced.LuceneQuery<ExpandoObject>() 
    .SelectFields<ExpandoObject>("customer", "locations;settings.enabled", "locations;name") 
    .ToList(); 

列表填充,幷包含了一堆客戶的性質ExpandoObjects的,但我不能爲我的生活得到的位置 - >名稱或位置 - >設置 - >啓用回來。

是「;」要麼 」。」錯誤的用法?

回答

1

看來你誤會在RavenDB索引和查詢的概念。當你在RavenDB中加載一個文檔時,你總是加載整個文檔,包括它所包含的所有內容。所以在你的情況下,如果你加載了一個客戶,你已經擁有了這個集合以及它的所有子項。這意味着,您可以使用標準的linq-to-objects來提取所有這些值,不需要像索引或lucene這樣的特殊內容。

如果你想要做在數據庫端這種提取,這樣就可以對這些屬性進行查詢,那麼你就需要一個索引。索引是用linq編寫的,但瞭解它們在服務器上運行並提取一些數據以填充lucene索引很重要。但是,在大多數情況下,你甚至不需要自己編寫索引,因爲RavenDB可以爲你自動創建索引。

我任何情況下,你需要編寫Lucene的查詢,如因爲在RavenDB Lucene的查詢一個在你的問題總是會針對預建指標執行,而這些一般是平的。但是,再次,你可能不需要用lucene做任何事情來獲得你想要的。

我希望對你有意義。如果沒有,請更新您的問題,並告訴我們更多關於您真正想要做的事情。

+0

我不想加載整個文檔。我只想從所有文檔中提取某些值。 使用LINQ我不能創建一個索引,因爲文件不與波蘇斯只是ExpandoObject或動態實體存儲。 – legion 2012-01-13 01:31:36

+0

您可以使用字符串創建索引,該字符串將在服務器上處理。 – 2012-01-13 14:05:27

+0

通過使用字符串創建索引,你的意思是什麼? – legion 2012-01-26 02:48:12

0

從技術上講,你可以用逗號「」巢到集合。 這應該工作,但不建議。你可以讓你的整個對象使用它,它更容易,更快。