jaedb/search

SilverStripe 搜索引擎

安装: 2,133

依赖者: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 5

类型:silverstripe-vendormodule

1.0.0 2018-08-28 03:35 UTC

This package is not auto-updated.

Last update: 2024-09-15 05:12:11 UTC


README

SilverStripe 内置的搜索表单是一个非常简单的搜索引擎。此插件将基于 SQL 的搜索提升到下一个层次,而无需实现像 Solr 或 Elastic Search 这样的完整搜索引擎。它旨在在简单的文本搜索功能之上增加数据导向的筛选器。

需求

  • SilverStripe 4

用法

  • 创建一个 SearchPage 实例(通常在网站根目录下)。此页面仅用于显示结果,请避免创建多个实例。
  • 配置您的网站 _config/config.yml 以定义搜索参数。
  • 运行 dev/build 以实例化新的配置

配置

  • types: 要搜索的类型关联列表
    • Label: 前端字段标签
    • Table: 对象的主表(注意带 _Live 后缀的版本化对象)
    • ClassName: 完整的 ClassName
    • ClassNameShort: 命名空间 ClassName
    • Filters: 应用预搜索的筛选器列表(映射到 DataList->Filter(key => value)
    • Columns: 用于查询字符串匹配的列(格式 Table.Column
  • filters: 筛选器选项关联列表
    • Structure: 定义筛选器的关系结构(必须是 dbhas_onehas_many 之一)
    • Label: 前端字段标签
    • Table: 关系主题的表
    • Column: 用于筛选的列
    • Operator: SQL 筛选运算符(例如 >=
    • JoinTables: 关系映射的关联列表(使用 types 数组的 key
      • Table: 关系连接表
      • Column: 用于连接的列
  • sorts: 排序选项的关联列表
    • Label: 前端字段标签
    • Sort: SQL 排序字符串

示例配置

---
Name: search
Before:
    - '#site'
---
Jaedb\Search\SearchPageController:
  types:
    docs:
      Label: 'Documents'
      Table: 'File_Live'
      ClassName: 'SilverStripe\Assets\File'
      ClassNameShort: 'File'
      Filters:
        File_Live.ShowInSearch: '1'
      Columns: ['File_Live.Title','File_Live.Description','File_Live.Name']
    pages:
      Label: 'Pages'
      ClassName: 'Page'
      ClassNameShort: 'Page'
      Table: 'Page_Live'
      Filters: 
        SiteTree_Live.ShowInSearch: '1'
      JoinTables: ['SiteTree_Live']
      Columns: ['SiteTree_Live.Title','SiteTree_Live.MenuTitle','SiteTree_Live.Content']
  filters:
    updated_before:
      Structure: 'db'
      Label: 'Updated before'
      Column: 'LastEdited'
      Operator: '<'
    updated_after:
      Structure: 'db'
      Label: 'Updated after'
      Column: 'LastEdited'
      Operator: '>'
    tags:
      Structure: 'many_many'
      Label: 'Tags'
      ClassName: 'Tag'
      Table: 'Tag'
      JoinTables:
        docs: 
          Table: 'File_Tags'
          Column: 'FileID'
        pages: 
          Table: 'Page_Tags'
          Column: 'PageID'
  sorts:
    title_asc:
      Label: 'Title (A-Z)'
      Sort: 'Title ASC'
    title_desc:
      Label: 'Title (Z-A)'
      Sort: 'Title DESC'
    published_asc:
      Label: 'Publish date (newest first)'
      Sort: 'DatePublished DESC'
    published_desc:
      Label: 'Publish date (oldest first)'
      Sort: 'DatePublished ASC'