jorgeanzola / craft-scout
Craft Scout 为您提供了一种简单的解决方案,可以将全文搜索添加到您的条目中。Scout 将自动保持您的搜索索引与条目同步。
Requires
- algolia/algoliasearch-client-php: ^1.23
- craftcms/cms: ^3.0.0-RC1
- league/fractal: ^0.16.0
README
Craft CMS 3 的 Scout 插件
Craft Scout 为您提供了一种简单的解决方案,可以将全文搜索添加到您的条目中。Scout 将自动保持您的搜索索引与条目同步。
支持开源。请买杯啤酒。
此插件受 MIT 许可证的许可,这意味着它是一项完全免费的开放源代码软件,您可以使用它来做什么和如何使用它。如果您在使用它并想支持开发,请在 Beerpay 上请我喝杯啤酒!
要求
此插件需要 Craft CMS 3.0.0-RC1 或更高版本。
安装
要安装插件,请按照以下说明操作。
-
打开您的终端并转到您的 Craft 项目
cd /path/to/project
-
然后告诉 Composer 加载插件
composer require rias/craft-scout
-
在控制面板中,转到设置 → 插件,并点击 Scout 的“安装”按钮。
设置
要定义您的索引,请在您的 config
文件夹中创建一个新的 scout.php
文件。此文件应返回一个包含 3 个键的数组,即 application_id
、您的 admin_api_key
(这两个都可以在您的 Algolia 账户中找到)以及一个 mappings
键,该键定义了您站点的映射。
在映射数组中,每个索引都由一个配置数组表示。
<?php return [ "sync" => true, "application_id" => "algolia", "admin_api_key" => "algolia", "mappings" => [ [ 'indexName' => 'blog', 'elementType' => \craft\elements\Entry::class, 'criteria' => [ 'section' => 'blog' ], 'transformer' => function (craft\base\Element $element) { return $element->toArray(); }, ], ... ], ];
同步选项
此配置变量确定 Scout 是否应自动保持您的条目同步。将此设置为 false
将禁用 Scout 的所有事件监听器。
映射配置设置
indexName
Algolia 中的索引名称,如果您尚未创建索引,Scout 将为您创建一个。
elementType
此索引包含的元素类型,大多数情况下这将 craft\elements\Entry::class
Craft 的默认元素类型类包括
craft\elements\Asset
craft\elements\Category
craft\elements\Entry
craft\elements\GlobalSet
craft\elements\MatrixBlock
craft\elements\Tag
craft\elements\User
'elementType' => craft\elements\Entry::class,
criteria
一个参数数组,应在元素查询上设置,以限制哪些条目进入索引。这些标准也用于通过控制台命令导入时。
'criteria' => [ 'section' => 'blog', ],
transformer
应使用的 transformer,以定义应发送到 Algolia 的每个元素的数据。如果您不设置此,将使用默认的 transformer,它包括元素的所有直接属性值,但不包括自定义字段值。
// Can be set to a function 'transformer' => function(craft\elements\Entry $entry) { return [ 'title' => $entry->title, 'id' => $entry->id, 'url' => $entry->url, ]; }, // Or a string/array that defines a Transformer class configuration 'transformer' => 'MyTransformerClassName', // Or a Transformer class instance 'transformer' => new MyTransformerClassName(),
您的自定义 transformer 类可能如下所示
<?php use craft\elements\Entry; use League\Fractal\TransformerAbstract; class MyTransformerClassName extends TransformerAbstract { public function transform(Entry $entry) { return [ // ... ]; } }
splitElementIndex
对于长文档,建议将元素分割成多行,以保持每行在行数据大小内。这可以通过使用 splitElementIndex
来完成。数组项是来自 transformer 的数组索引。
'splitElementIndex' => [ 'summary', 'matrixElement' ]
重要 - distinctId(在索引后可用)必须设置为一个属性,以便在使用 splitElementIndex 时,删除对象时可以进行分割。
控制台命令
Scout 提供了两个易于使用的控制台命令来管理您的索引。
导入
要导入一个或所有索引,可以运行以下控制台命令
./craft scout/index/import <indexName?>
不需要 indexName
参数,当省略它时,将导入所有映射。
刷新/清除
清除索引就像在控制台运行命令一样简单。
./craft scout/index/flush <indexName?>
与导入命令一样,indexName
不是必需的,当刷新 Scout 时,它会询问你是否真的想要清除索引中的所有数据。
致谢
- Craft Algolia 由 aaronwaldon 作为起点基础
- @larsboldt 提供了 Split Element Index 选项
由 Rias 提供