2012-10-25 69 views
2

說我有一個User類是這樣的:我應該如何過濾RavenDB Lucene搜索的結果?

public class User 
{ 
    public bool IsActive {get;set;} 
    public string[] Tags{get;set;} 
    public string Description {get;set;} 
} 

我想用RavenDB來搜索的一組用戶相匹配下列條件的:

  • IsActive = 真正
  • Tags同時包含'你好'和'世界'
  • Description具有以下那句「悲慘的失敗

我已經研究了Lucene的查詢語法,我甚至得到了一些東西的工作,但是這一切都感覺不堪沉悶,有很多組合串建設創造一個基於文本的lucene查詢字符串。我不願意把我的代碼放在這裏,因爲它很臭。

我想我想這樣做提交一個Lucene Search的說明和標籤,然後將其過濾與isActive域一個Where條款,或許這樣Filter RavenDB Search Results。但我迷路了。

我使用的是最新的官方版本(960),所以所有在這之後的常規東西還沒有提供給我。例如,由於960不支持.As<T>()擴展名,因此this solution是過時的。

問題

如何構造所需索引和查詢執行,結合了搜索:

  • 一個約束,如IsActive
  • 集合約束,例如Tags
  • 自由文本約束,例如Description

返回User對象的強類型列表?

感謝您的任何代碼示例或指針。

回答

1

您的查詢是這樣的:

var results = (from u in Session.Query<User>("YourUserIndex") 
       where u.IsActive && u.Tags.Any(x=>x == "hello") && x.Tags.Any(x=>x=="world") 
       select u) 
       .Search(x=>x.Description, "abject failure") 
       .ToList(); 

YourUserIndex看起來是這樣的:

from u in docs.Users 
select new { u.IsActive, u.Tags, u.Description }; 

而你需要的分析,以紀念描述字段。