0

我有一个带有“名称”列的“餐厅”表。我定义了以下索引:

indexes "REPLACE(UPPER(restaurants.name), 'THE ', '')", :as => :restaurant_name, :sortable => true

...因为我想对餐厅名称进行排序而不考虑前缀“The”。

我的问题是,每当这些记录之一被更新(以任何方式)时,新记录都会跳到排序顺序的顶部。如果另一个记录被更新,它也会跳到其他记录之前。我最终得到了两个列表:自上次重新索引以来已更新的餐厅列表和尚未更新的餐厅列表。每个相应的列表都按字母顺序排列,但我不明白为什么整个列表会以这种方式被隔离。我确实设置了延迟增量索引,我认为问题与此有关。

4

2 回答 2

1

不幸的是,这是狮身人面像的限制。

要按字符串排序,它会构建一个有序的值列表,然后将它们转换为表示列表中位置的整数。这发生在每个索引的基础上,因此当第一个项目添加到增量索引时,您最终会得到 2 条以 1 排序的记录。下一条记录意味着您将有 2 条以 2 排序的记录,依此类推。

于 2010-04-23T22:08:23.120 回答
0

我通过创建自己的排序方法来处理这个问题。您可以根据字符串的某些部分创建一个整数值。我采取了一种廉价的方法,只使用了第一个字符的 char 值。通过创建一个转换短语中更多字符的算法,您可以变得更复杂。当我使用另一个搜索引擎进行搜索时,我们使用了 6 个字符,并且很少出现乱序,这就是我们的整个排序方法。如果您这样做并在那时将其设置为次要订单,它将有助于解决您的增量问题。

于 2010-04-27T18:25:04.140 回答