2

AUser拥有一个或多个文档子集 ( Posts)。这个想法(UX)是让User管理(可选Posts)在一个子集中出现的顺序。

默认情况下,Posts按 排序CreatedOn。最终,User拖放 Posts来管理他们的订单。这将允许User推广和组织Posts.

一个简单的Int32领域Position会引发很多问题。例如:

  • 你允许一个位置是负面的吗?
  • 你如何处理职位相同的帖子?
  • 您是否引入间隙以减少碰撞?
  • 每次职位更改时,您都会更新所有帖子吗?
  • ETC..

..最后是我的观点:

按用户管理的位置对 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 回答