1

ブログに似た構造のソーシャル機能 (投稿とコメント) があります。

投稿には本文と呼ばれるフィールドがあり、コメントも同様です。投稿とコメントは SharePoint リストに保存されるため、SQL 全文クエリを直接実行できます。

誰かが「11 月の停止復旧効率」と入力した場合、投稿の内容とそれに添付されたコメントに基づいて投稿のリストを適切に返す方法については、まったくわかりません。

幸いなことに、一度に検索する必要がある投稿は 50 ~ 100 件を超えることはありません。これを解決する最も簡単な方法は、投稿とコメントをメモリに読み込み、ループ経由で検索することです。

理想的には、次のようなものが最速のソリューションになります。

class Post
{
    public int Id;
    public string Body;
    public List<Comment> comments;
}
class Comment
{
    public int Id;
    public int ParentCommentId;
    public int PostId;
    public string Body;
}
public List<Post> allPosts;
public List<Comment> allComments;

public List<Post> postsToInclude (string SearchText)
{
    var returnList = new List<Post>();
    foreach(Post post in allPosts)
    {
        //check post.Body with bool isThisAMatch(SearchText, post.Body)
        //if post.Body is a good fit, returnList.add(post);
    }
    foreach(Comment comment in allComments)
    {
        //check post.Body with bool isThisAMatch(SearchText, comment.Body)
        //if comment.Body is a good fit, returnList.add(post where post.Id == comment.PostId);
    }
}

public bool isThisAMatch(string SearchText, string TextToSearch)
{
    //return yes or no if TextToSearch is a good match to SearchText
}
4

2 に答える 2

4

それは些細な問題ではありません。マシンには「コンテンツ」という概念がないため、特定のトピックに関する記事を検索することは本質的に困難です。各記事が検索用語に関連しているかどうかを推測するには、TF-IDFなどのプロキシ アルゴリズムを使用する必要があります。

それを自分で実装する代わりに、既存の情報検索ライブラリを使用することをお勧めします。そこには本当に人気のあるものがいくつかあります。私自身の経験に基づいて、Apache Luceneを詳しく調べることをお勧めします。それらの参照リストを見ると、その重要性がわかります。

情報検索に関係したことがない場合は、学習曲線が非常に急勾配になることをお約束します。この領域全体を簡単に理解するには、まずSolrを使用することをお勧めします。それはほとんど「箱から出して」実行され、何が可能かについての良いアイデアを提供します。利用可能なフィルターとアルゴリズムの各ステップを実際に調べ始めたとき、画期的な発見がありました。その後、より良い結果を得るために何を変更すればよいかをよりよく理解できるようになりました。コンテンツの形式によっては、システムを大幅に調整する必要がある場合があります。

私は仕事でLucene、Solr、およびいくつかの代替品に多くの時間を費やしてきました。最終的に得た結果は許容範囲でしたが、難しいプロセスでした。そこにたどり着くまでには、多くの理論、テスト、プロトタイピングが必要でした。

于 2013-07-23T00:54:29.693 に答える
-1

注:これを行った経験はありませんが、これが私が問題に取り組む方法です。

まず、並行して検索を行います。これにより、検索機能のパフォーマンスが大幅に向上します。

次に、複数の単語を入力できるため、クエリに基づいてコメントをスコアリングするスコアリング システムを作成します。たとえば、コメントにクエリ ワードが 2 つ含まれている場合、クエリ ワードが 1 つしか含まれていないコメントよりもスコア値が高くなります。または、コメントに完全一致が含まれている場合、非常に高いスコアを受け取る可能性があります。

とにかく、並列ループでクエリ入力に基づいてすべてのコメントがスコア付けされたら、結果として上位のコメントをユーザーに表示します。さらに、データセットのサイズが 50 ~ 100 と小さいため、これが機能することに注意してください。

于 2013-07-23T00:50:08.293 に答える