Silverstripe网站的搜索引擎 - 基于jaedb/search进行分支

安装量: 1,930

依赖项: 0

建议者: 0

安全: 0

星级: 2

关注者: 1

分支: 5

类型:silverstripe-vendormodule

1.0.19 2024-08-28 02:43 UTC

README

Silverstripe内置的搜索表单是一个非常简单的搜索引擎。此插件将基于SQL的搜索提升到下一个层次,而不需要实现完整的搜索引擎,如Solr或Elastic Search。它旨在在简单的文本搜索功能之上添加面向数据的筛选功能。

要求

  • SilverStripe 4

使用方法

  • 创建一个SearchPage实例(通常位于网站根目录)。此页面仅用于显示结果,因此请避免创建多个实例。
  • 配置您的网站_config/config.yml(或添加_config/search.yml)以定义搜索参数。
  • 运行dev/build以实例化新的配置(如果不存在,此操作还将自动创建一个SearchPage实例)。
  • 要覆盖默认的SearchPage模板,请向您的应用程序添加一个模板文件:templates/PlasticStudio/Search/Layout/SearchPage.ss

Elemental

  • 包含Elemental搜索
  • 在页面或元素保存时,所有元素的内容都将保存到sitetree上的名为ElementalSearchContent的字段中。
  • 只需将'SiteTree_Live.ElementalSearchContent'添加到页面列列表中
  • 目前尚无方法排除个别元素被包含。
  • 运行IndexPageContentForSearchTask以索引元素内容

配置

  • types:要搜索的类型关联列表
    • Label:前端字段标签
    • Table:对象的主表(注意版本化对象的_Live后缀)
    • ClassName:完整的ClassName
    • ClassNameShort:命名空间化的ClassName
    • Filters:要应用的筛选器列表(映射到DataList->Filter(key => value)
    • Columns:用于查询字符串匹配的列(格式Table.Column
  • filters:筛选器选项关联列表
    • Structure:定义筛选器的关联结构(必须是dbhas_onemany_many之一)
    • Label:前端字段标签
    • Table:关系主题的表
    • Column:用于筛选的列
    • Operator:SQL筛选运算符(例如><=
    • JoinTables:关系映射的关联列表(使用types数组中的key
      • Table:关系连接表
      • Column:用于连接的列
  • sorts:排序选项关联列表。这些用于在高级搜索表单中填充“排序方式”下拉字段。搜索结果的排序顺序将默认为列表中的第一个项。
    • Label:前端字段标签
    • Sort:SQL排序字符串
  • submit_button_text:用于搜索表单提交按钮的文本(默认为“搜索”)

待办事项:defaults:默认属性或设置,与通过搜索表单提交的属性或设置相对。

示例配置

---
Name: search
Before:
    - '#site'
---
PlasticStudio\Search\SearchPageController:
  types:
    docs:
      Label: 'Documents'
      Table: 'File_Live'
      ClassName: 'SilverStripe\Assets\File'
      ClassNameShort: 'File'
      Filters:
        File_Live.ShowInSearch: '1'
        File_Live.ClassName:  '''Silverstripe\\Assets\\File''' # You need to TRIPLE-ESCAPE in order to pass this as a string to the query
      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', 'SiteTree_Live.ElementalSearchContent']
  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'
      authors:
        Structure: 'many_many'
        Label: 'Authors'
        ClassName: 'Member'
        Table: 'Member'
        JoinTables:
          pages: 
            Table: 'Page_Authors'
            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'
  submit_button_text: 'Go'
  ## TODO:
  ## defaults:
    ## sort: 'Title ASC'