2

は、ドキュメントのUser1つまたは複数のサブセットを所有しています(Posts)。アイデア(UX)は、1つのサブセット内に表示される順序をUser管理(オプションで)させることです。Posts

デフォルトでPostsは、でソートされていCreatedOnます。最終的に、Userドラッグアンドドロップ Postsで順序を管理します。これにより、User宣伝および整理することができPostsます。

単純なInt32フィールドPositionは多くの質問を提起します。

  • ポジションをネガティブにすることを許可しますか?
  • 同じ位置の投稿をどのように処理しますか?
  • 衝突を減らすためにギャップを導入しますか?
  • ポジションが変わるたびにすべての投稿を更新しますか?
  • 等..

..そして最後に私のポイント:

Luceneドキュメントをユーザー管理ポジションでソートするための最良のソリューションは何ですか?おそらくInt32フィールドPosition

編集(貴重な情報):

  • 投稿はデータベースとLuceneインデックスにあります。
  • 投稿はページングされます。
4

3 に答える 3

3

リンクリストをエミュレートするのが一番簡単だと思います。各ドキュメントに次のドキュメントへのポインタを追加します。それを直接行うことができない場合(データベースなどにあるため、実際にはアドレスがありません)、各ドキュメントにIDとnextIDを使用できます。IDが異なることを確認してください。ユーザーがドラッグアンドドロップする場合は、リストを再配線するだけです。

于 2012-08-31T18:02:52.350 に答える
1

この質問を見てください:順序付きリストの並べ替え

悲しいことに、この問題に対する完全な解決策はありません;-)

于 2012-08-31T23:02:01.193 に答える
1

私はCustomScoreQueryこれの解決策になると思います

public class MyScoreQuery : Lucene.Net.Search.Function.CustomScoreQuery
{
    public MyScoreQuery (Query q) : base(q)
    {
    }
    public override float CustomScore(int doc, float subQueryScore, float valSrcScore)
    {
        //read the doc if you need "indexReader.Document(doc)"
        //and apply your custom logic returning a float
    }
} 

使用法は

Query realQuery =  ........
Query q = new MyScoreQuery (realQuery);
于 2012-09-01T20:31:55.450 に答える