11

我正在开发一个应用程序,其中我有一些从网络获取的数据到一个类中。类是

public class Detail
{
        public string name { get; set; }
        public List<Education> education { get; set; }
        public City city { get; set; }
        public List<Work> work { get; set; }
}

public class Education
{
        public string DegreeName { get; set; }
}

public class City 
    {
        public string name { get; set; }
    }
public class Work
    {
        public string name { get; set; }
    }

为上述类中的人存储数据。

现在我想搜索一个字符串说q=" Which Manager Graduated From USA ?"

所以我希望它搜索上述查询...

根据匹配的单词数量,我想给出用户的名称。如果他是从美国毕业的经理,那么正在寻找人吗?(可能会少一些字,像一些印度导演一样搜索)

我正在尝试寻找像Manager inWorkGraduate inEducationLocation for这样的词的方法USA

我正在制作一个搜索字符串数组

string[] qList = q.Split(' ');

然后遍历类。但我不知道如何(有效地)在课堂上查找数据。

我的方法对于搜索是否足够好,还是有更好的选择?

4

4 回答 4

2

我有点担心你试图实现的机制,如果用户类型q=" Manager Graduated From USA ?",意思是没有把“which”这个词放在里面,所以你必须按照建议使用像 ANTLR 这样的查询语言。

我的建议是给用户下拉列表,首先必须包含工作属性的值,第二必须包含教育的值,然后是输入城市的文本框。

将这些值传递给您的方法后,使用 LINQ 从您的集合中获取数据,例如:

var filteredResults = from result in YOURDETAILCOLLECTION
                      where result.city.Contains(YOURCITYTEXTBOXVALUE)
                      select result;

您可以搜索机制,如何whereLINQ.List

于 2012-07-10T07:58:47.877 回答
2

您正在开发的是一种人类可读和可写的查询语言。从字符串拆分开始可能是一个很好的开始,但想象一下搜索的可能性:搜索一个城市或一系列城市的人,搜索在 500 强公司或某个领域工作的人。

为此,您应该开发一种查询语言。具有易于更改和记录的语法。看看ANTLR一个与 C#/.NET 配合得很好的解析器生成器。

于 2012-07-10T07:39:52.330 回答
1

如果可能,请尝试使用Lucene .NET或类似的搜索技术(如 Solr 或 ElasticSearch)来索引您的数据。这些技术针对搜索进行了优化,并为您提供了许多提高结果排名的选项。它可以轻松回答您开篇文章中的问题,而且速度非常快。自己实现此功能将非常困难。

于 2012-07-10T11:00:54.810 回答
0

如果您有许多您知道将存在的领域——比如教育和工作——我建议为每个领域准备一系列同义词和与单词相关的词。

所以,对于教育,你可以有一个这样的单词列表:

Graduate, University, School, Learning, Taught e.t.c

做这样的事情?

显然,您无法匹配每个单词,但可能值得一试?

或者您可以尝试在每个字段中包含标签,而不仅仅是单词。因此,与其说“我从大学毕业”,不如说你有一个教育领域,然后是一个大学子领域,他们把名字放在那里。

这一切都是为了限制错误,请记住人类可能会犯数百万个您无法以编程方式处理的错误。

于 2012-07-10T07:40:28.737 回答