在搜索引擎中搜索单个和多个单词

时间:2017-04-10 08:30:37

标签: c# angularjs asp.net-mvc linq lambda

这里的任何人都可以帮助我解决我们在我们的应用程序中的“搜索”功能的问题,他们希望这两个示例单词具有相同的结果,即玩具玩具< / strong>即可。

例如,如果他们搜索“玩具”,则应用程序应返回其中包含“玩具”的所有数据或“玩具“反之亦然”玩具“。

我已经在LINQ中使用 .Contains(),因为这是实现此结果的最佳方式,但当我检查“玩具”时,它搜索了“玩具“和”玩具“然后当我搜索”玩具“时,它只搜索”玩具“而不是“的玩具

以下是我的示例代码:

context.CapabilityHasMethodHasSubstances
    .Where(c => c.Substance.SubstanceLocale.Where(x => x.LocaleId == 2057).FirstOrDefault()
    .Description.Contains(filter) && !c.IsDeleted)
    .Select(c => c.CapabilityId).ToList()

提前感谢能帮我解决问题的人。 :)

2 个答案:

答案 0 :(得分:0)

这样做的一个想法是为您的alias(搜索词)引入一些filter的集合。

您现在的任务是解决复数形式,这可以通过此实现。此外,如果您以后必须为给定单词指定同义词,则可以轻松扩展它。

    Dictionary<string, string> AliasDict = new Dictionary<string, string>()
    {
       {  "Toys" , "Toy"},     // plural form
       {  "Game" , "Toy"},     // synonym 
       {  "Games" , "Toy"},    // plural synonym
       { "Sheeps" , "Sheep" }
    };

    public string ResolveAlias(string alias)
    {
        if (AliasDict.ContainsKey(alias))
        {
            return AliasDict[alias];
        }
        return alias;
    }

在您的代码中只需使用以下方法:

context.CapabilityHasMethodHasSubstances
    .Where(c => c.Substance.SubstanceLocale.Where(x => x.LocaleId == 2057).FirstOrDefault()
    .Description.Contains(ResolveAlias(filter)) && !c.IsDeleted)
    .Select(c => c.CapabilityId).ToList()

答案 1 :(得分:0)