银条。按 ID 挂起过滤 CMS 结果

Silverstripe. Filtering CMS results by ID hangs

我有一个使用 Silverstripe CMS 构建的网站。

我们经常需要通过帐户 ID 来搜索用户。所以我补充说:

    private static $searchable_fields = array(
        'ID',
         ...
     );

到帐户数据对象。当我们尝试按 ID 搜索时,您需要先输入哈希 (#),然后输入帐户 ID。这似乎是默认行为。

当您开始输入帐户 ID 时,cpu 挂起并需要很长时间才能响应,这毫无意义,因为在响应所需的时间内,您可以找到该帐户通过其他方式。它最终会做出响应并提供与搜索词相匹配的正确帐户。 None 我们其他搜索字段的行为与此类似。

有没有更好的方法来实现这个过滤器?

首先,添加哈希 (#) 不是标准行为,所以肯定会发生一些奇怪的事情!默认情况下,ID 字段应始终被索引,但请检查您的数据库是否具有 ID 的主字段索引。 我假设您正在搜索 ModelAdmin 实例?如果您可以显示一些可能有帮助的帐户代码。

如果 SilverStripe 没有自动创建 ID 字段及其索引,则已经出现故障。

如果您使用的是非标准 ID 字段(不是自动 DataObject.ID 字段),则可以使用 DataObject 上的 $indexes 静态在数据库。确保任何搜索字段都有索引始终是个好主意。 看这里: https://docs.silverstripe.org/en/3/developer_guides/model/indexes/

请注意,如果您没有找到问题的原因,它很可能稍后会回来咬您。

这两件事(“#”和缺少索引)表明您的 SilverStripe 安装、配置或代码存在严重错误。不过,祝你好运!