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 in WorkGraduate in EducationLocation forのような単語を探しているアプローチUSA

検索文字列の配列を作っています

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

次に、クラスをトラバースします。しかし、クラス内のデータを (効率的に) 検索する方法がわかりません。

そして、私のアプローチは検索に十分ですか、それともより良いオプションがありますか?

4

4 に答える 4

2

あなたが開発しているのは、人間が読める形式と書き込み可能なクエリ言語です。文字列の分割から始めることもできますが、検索の可能性を想像してみてください。ある都市またはさまざまな都市の人々を検索し、上位500社または特定の分野で働いていた人々を検索します。

この目的のために、クエリ言語を開発する必要があります。簡単に変更でき、文法が文書化されています。C#/。NETでうまく機能するパーサージェネレーターであるANTLRを見てください。

于 2012-07-10T07:39:52.330 に答える
2

私はあなたが実装しようとしているメカニズムについて何らかの懸念を持っています。ユーザーがタイプする場合q=" Manager Graduated From USA ?"、「どの」という単語が含まれていないことを意味するため、提案されているANTLRのようなクエリ言語を使用する必要があります。

私の推奨は、ユーザーにドロップダウンを提供することです。最初に仕事のプロパティの値を含める必要があり、2 つ目に教育の値を含める必要があり、都市を入力するためのテキスト ボックスを含める必要があります。

これらの値をメソッドに渡した後、次のように LINQ を使用してコレクションからデータを取得します。

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

の仕組み、使い方を検索whereできLINQますList

于 2012-07-10T07:58:47.877 に答える
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 に答える