我使用RavenDB Embedded 3.0
,並有文件Customer
及其如下數據:RavenDB 3.0 LIKE查詢
ID 名稱
客戶/ 101 利奧
客戶/ 102 個 利奧陳
客戶/ 103 李歐梵
客戶/ 104 特殊名稱?
我想執行一個SQL像在球場上Name
LIKE '%keyword%'
檢索(關鍵字可以包含特殊字符,並且不區分大小寫),採取以下三種測試情況爲例:
- 如果關鍵字
Leo
(或eo
或EO
),它返回記錄customers/101 Leo
,customers/102 Leo Chan
和customers/103 Leo Lee
。 - 如果關鍵字是
Leo Chan
(或Leo Ch
或eo Ch
或EO ch
),那麼唯一的結果是customers/102 Leo Chan
。 - 如果關鍵字是
?
,則只會返回最後一條記錄customers/104 Special Name?
(關鍵字中的問號?
不會充當我的情況的通配符,它只是要搜索的普通文本)。
如何在RavenDB 3.0中實現上述邏輯?請原諒我,我是RavenDB的新手,對Lucene不熟悉,很高興提供詳細代碼供參考。先謝謝了!
EDIT
爲了說明問題更清楚,以下示出了我使用的代碼,它僅通過測試情況#1在上面列出。
實體和索引:
class Customer {
public string Id { get; set; }
public string Name { get; set; }
}
class Customers_ByName : AbstractIndexCreationTask<Customer> {
public Customers_ByName() {
Map = customers => from customer in customers
select new {
customer.Name
};
Indexes.Add(c => c.Name, FieldIndexing.Analyzed);
}
}
而且搜尋摘要:
var keyword = "Leo Chan";
var query = string.Format("*{0}*", QueryParser.Escape(keyword).Replace(" ", @"\ "));
var list = session.Query<Customer, Customers_ByName>()
.Search(c => c.Name, query, escapeQueryOptions: EscapeQueryOptions.AllowAllWildcards)
.ToList();
Console.WriteLine(list.Count); // 0
和索引定義數據庫
from doc in docs.Customers
select new {
Name = doc.Name
}
傑夫您好,感謝您的信息!我同意「默認安全」的概念,但我確實認爲我的要求是常見的,從用戶的角度來看,它對搜索很有幫助和便利。對於性能問題,我認爲慢比沒有好,對吧?我已更新我的帖子以包含我用作參考的代碼。謝謝! – Leo
我同意你的意見。 – Jeff