plasticstudio / search
Silverstripe网站的搜索引擎 - 基于jaedb/search进行分支
1.0.19
2024-08-28 02:43 UTC
Requires
- silverstripe/cms: ^4 || ^5
- silverstripe/framework: ^4 || ^5
- silverstripe/vendor-plugin: ^1 || ^2
- dev-master
- 3.x-dev
- 1.0.19
- 1.0.18
- 1.0.17
- 1.0.16
- 1.0.15
- 1.0.14
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-feature/priority
- dev-bugfix/php-8.1-errors
- dev-fix/php8.1-str_replace
- dev-feature/elemental-search-test
- dev-hotfix/placeholder_text
- dev-fix/multiple_manymany_filters
This package is auto-updated.
Last update: 2024-09-02 01:21:36 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
:完整的ClassNameClassNameShort
:命名空间化的ClassNameFilters
:要应用的筛选器列表(映射到DataList->Filter(key => value)
)Columns
:用于查询字符串匹配的列(格式Table.Column
)
filters
:筛选器选项关联列表Structure
:定义筛选器的关联结构(必须是db
、has_one
或many_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'