vulcandigital / silverstripe-search

SilverStripe 的全文搜索替换概念,支持使用索引罐

安装: 672

依赖关系: 0

建议: 0

安全性: 0

星标: 7

关注者: 2

分支: 1

开放性问题: 1

类型: silverstripe-vendormodule

1.0.0 2018-02-14 10:08 UTC

This package is auto-updated.

Last update: 2024-09-18 20:10:16 UTC


README

该模块是 SilverStripe 的单行搜索替换概念,支持使用索引罐

Preview

要求

  • silverstripe/framework: ^4.0

安装

composer require vulcandigital/silverstripe-search

开始使用

“什么可以搜索” 是最大的问题,答案是

任何启用了 SearchIndexExtensionDataObject 或其子类

1. 应用扩展

要将扩展应用到 DataObject,添加以下配置属性

class Recipe extends DataObject
{
    // Apply the extension
    private static $extensions = [
        \Vulcan\Search\Extensions\SearchIndexExtension::class
    ];
    
    // the search tank that records from the class are indexed under 
    // this is optional and will default to "Main" if not provided
    private static $search_tank = 'Recipes'
    
    private static $db = [
        'Title' => 'Varchar(255)',
        'Content' => 'HTMLText',
        'SomeRandomFieldWithContent' => 'Text',
        'UselessField' => 'Boolean'
    ];
    
    // Showing the use of Dot Notation in searchableColumns()
    private static $has_one = [
        'User' => Member::class
    ];
    
    // This will conslidate the content from all columns into a single searchable line of text
    public function searchableColumns() 
    {
        return [
            'Title',
            'Content',
            'SomeRandomFieldWithContent',
            'User.FirstName'
        ]
    }
}

注意:当前不支持在 has_many 或 many_many 关系中使用点表示法

之后,请确保您执行了 dev/build 和 ?flush

2. 构建索引

如果您已将扩展应用到具有现有记录的 DataObject 或页面,请从 dev/tasks 运行 构建搜索索引清单 任务以索引现有记录

当向 DataObject 添加新记录时,它们也将被索引。当记录被删除时,索引条目也将被删除

如果 DataObjectPage,则只有在页面发布时才会索引新记录,当页面取消发布或删除时不会索引

3. 创建搜索页面

打开 CMS,并创建一个新的 SearchPage。这可以是一个根项目或任何其他页面的子项

  1. 切换到 "搜索" 选项卡
  2. 选择页面的适当索引罐(默认为 "Main")
  3. 保存并发布页面
  4. 开始在索引罐中搜索结果

如果您想有多个搜索页面,其中搜索的记录不同,则需要为该 DataObject 指定唯一的索引罐名称(默认情况下,将使用 Main 罐)

private static $search_tank = 'MyCustomTank';

这将确保该 DataObject 中所有记录都存储在自定义罐标识符下,该罐可以分配给特定的 SearchPage

此模块包含默认的 SearchPage 页面类型。提供的模板仅作为示例,您应该创建自己的覆盖模板。

重命名筛选器标题

如果您想更改搜索筛选器显示的名称,您需要在您的 DataObject/Page 中添加以下内容

private static $singular_name = 'Instruction';
private static $plural_name = 'Instructions';

结果项目渲染

您可能希望根据它们代表的类(如上面的预览图像所示)以不同的方式渲染结果。

为了实现这一点,对于上面的 Recipe 类,您必须在您的主题目录中创建以下文件夹结构

- themes/
  - mytheme/
    - templates/
      - Vulcan/
        - Search/
          - Render/

然后,在文件夹内,您可以创建一个新的模板,命名为 RenderRecipe.ss。该模板可以完全访问单个结果中的所有内容(在顶层)

<div class='search-result recipe'>
    <h1><% if $Link %><a href="$Link">$Title</a><% else %>$Title<% end_if %></h1>
    <div class='content'>$Content</div>
    <div class='meta'>Uploaded by: $User.FirstName</div>
</div>

常见问题解答

我看不到我的类中的现有记录在搜索中
解决方案 1. ?flush=1
解决方案 2. 如果您已将扩展应用到具有现有记录的类,您应从 dev/tasks 运行 构建搜索索引清单 任务

我看到了一些不再存在的记录的结果
这种情况不应该发生,但如果发生了,您可以运行来自 dev/tasks 的 搜索索引维护任务

许可证

BSD 3-Clause © Vulcan Digital Ltd