代码之家  ›  专栏  ›  技术社区  ›  Chris Stewart

用于全文搜索的LINQ查询

  •  1
  • Chris Stewart  · 技术社区  · 14 年前

    如何查询“John Doe”等关键字的集合,其中属性的值可能是“John M Doe”?做一个包含肯定不会工作,但下面是一个想法,我追求什么。people是一个列表,包含具有Name和Description属性的Person对象。

    string keyword = "John Doe";
    var q = from person in people
            where person.Name.ToLower().Contains(keyword.ToLower()) || person.Description.ToLower().Contains(keyword.ToLower())
            select person;
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Samuel Jack    14 年前

    这听起来像是 Linq to Lucene

        2
  •  1
  •   Mau    14 年前
    bool MatchKeywords(string keyWord, string text) {
        var tokens = keyWord.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries).Select(s=>s.Trim().ToLower());
        return tokens.Any(t => text.ToLower().Contains(t));
    }
    
    
    //...
    
    string keyword = "John Doe";
    
    var q = from person in people
            where MatchKeywords(keyword, person.Name)
            select person;
    
        3
  •  0
  •   LBushkin    14 年前

    您可以尝试将搜索项划分为标记并单独搜索它们,但这只能进行到目前为止-它无法处理更复杂的变化。您也许可以设计一个正则表达式,但这也不一定能捕捉到更复杂的情况。

    如果您需要的不仅仅是简单的匹配支持,您可能需要研究 Lucene.NET