至於是什麼,我試圖完成一個例子匹配的字符串,這裏是一些代碼,構建出的書籍稱爲Sentence
的字符串屬性的列表。在搜索上的報價短語等關鍵詞
public class Book {
public string Sentence { get; set; }
}
Book book1 = new Book() { Sentence = "The quick brown fox jumps over the lazy dog" };
Book book2 = new Book() { Sentence = "The quick brown frog jumps over the lazy sloth" };
List<Book> books = new List<Book>();
books.Add(book1);
books.Add(book2);
我想通過基於某些用戶輸入的書籍列表進行搜索(搜索要求不應該比此示例更復雜)。
如果用戶提供的quick fox "lazy dog"
搜索短語,然後我就回到它有BOOK1作爲集合的成員列表。如果用戶提供搜索短語quick fox sloth
,則不應返回任何內容,因爲這三個單詞不會全部出現在任何屬性中。
摘要
quick fox "lazy dog"
- 1結果(在引號詞語一起出現,且剩餘的詞單獨地出現)quick fox sloth
- 無結果"lazy sloth"
- 1結果(兩個單詞一起出現在字符串中)lazy sloth
- 1個結果(這兩個詞出現在字符串中的個人)
,我目前擁有的代碼:
//Turn the search word into an array of words (includes support for quotes phrases). E.g: quick fox "lazy dog" becomes a list of these values: `quick`, `fox`, `lazy dog`.
var searchWords = Regex.Matches(searchWord, @"(?<match>\w+)|\""(?<match>[\w\s]*)""")
.Cast<Match>()
.Select(m => m.Groups["match"].Value)
.ToList();
var query = from b in books
where (!string.IsNullOrEmpty(b.Sentence) && searchWords.Any(b.Sentence.Contains))
select b;
這並不適用於情況2.我的代碼工作現在只是尋找1場比賽,如果它獲得1場比賽,那麼它會考慮找到物品。
感謝您的答覆。你完全正確,這是我需要解決我的例子。我可能會考慮Lucene.NET,但是這回答了我的問題。 – 2012-04-24 16:37:29