thehome/statamic-elasticsearch

Statamic 的 Elasticsearch 驱动程序

1.4.2 2023-08-03 10:13 UTC

This package is auto-updated.

Last update: 2024-09-03 12:32:16 UTC


README

Statamic 3.0+ Latest Version on Packagist

Statamic 的 Elasticsearch 驱动程序

此插件向 Statamic 内置的搜索系统添加了 Elasticsearch 驱动程序(文档)。

设置索引

索引在 config/statamic/search.php 中配置,并使用标准的 Statamic 索引配置。还有一些额外的配置选项。

indexes 中为页面集合添加条目

'public' => [
  'driver' => 'elasticsearch',
  'searchables' => 'collection:pages',
  'fields' => ['title', 'description', 'content'],
],

drivers 部分定义连接属性的示例条目

'elasticsearch' => [
    'hosts' => [[
       'scheme' => env('ELASTICSEARCH_SCHEME', 'http'),
       'host' => env('ELASTICSEARCH_HOST', '127.0.0.1'),
       'port' => env('ELASTICSEARCH_PORT', 9200),
    ]]
],

内容转换

Statamic 支持索引数据的转换器,但当前的实现与 Laravel 在运行 php artisan optimize 时序列化配置的方式不兼容。因此,此驱动程序有自己的系统,可以按如下方式配置

'public' => [
  ...
  'transforms' => ['content' => 'bardToText'],
],

可用的转换器

  • 'bardToText',将 ProseMirror 数据结构转换为纯文本,以便可以索引。
  • 'handle',将具有句柄(例如,站点和集合)的字段转换为句柄文本。

分析器

Elasticsearch 支持不同的文本分析器进行索引。分析器确定分词、停用词和词干处理的方式。您可以设置默认分析器(用于所有字段)如下所示

'public' => [
  'driver' => 'elasticsearch',
  'searchables' => 'collection:pages',
  'fields' => ['title', 'description', 'content'],
  'analyzer' => 'danish'
],

如果未设置,则使用 standard 分析器。请参阅可用的语言分析器列表 此处

字段加权

您可以定义加权值来加权单个字段。

'boost' => [
    'title' => '2',
    'keywords' => '2'
]

更新索引

每次在控制面板中保存项目时,它都会自动更新任何适当的索引,因为这扩展了 Statamic 搜索。如预期的那样,您可以通过命令行更新索引。

php please search:update public

验证索引数据

您可以使用以下方法验证您的 Elasticsearch 索引是否正确:

curl 127.0.0.1:9200/_cat/indices/public?v

或者直接查询

curl 127.0.0.1:9200/public/_search?q=test | jq

模板化

您可以使用默认的 Statamic 搜索标签,就像平常一样

{{ search:results index="public"}}
    {{ if no_results }}
        <h2>No results.</h2>
    {{ else }}
        <a href="{{ url }}">
            <div>{{ title }}</div>
            <p>{{ description | truncate:180 }}</p>
        </a>
    {{ /if }}
{{ /search:results }}

带有分页的 Livewire 组件

包含的分页 Livewire 组件支持使用 Elasticsearch 进行分页。这需要字段 status 已被索引,因此将其添加到配置中

'public' => [
  ....
  'fields' => [ ... 'status'],
],

如果您有多个站点,并且想要搜索页面仅返回特定站点的结果,则必须将 site 字段添加到索引中。由于 site 字段是对象,因此必须使用 handle 转换器将其转换。

'public' => [
  ....
  'fields' => [ ... 'status', 'site'],
  'transforms' => ['site' => 'handle'],
],     

然后您需要为您的 Antlers 模板启用 Livewire 支持。简单的方法是安装 Jonas 的插件

composer require jonassiewertsen/statamic-livewire

然后创建您的搜索 Antlers 模板,包括

{{ livewire:styles }}
{{ livewire:elasticsearch.search index="public" size="10"}}
{{ livewire:scripts }}  

可以通过发布它来覆盖模板

php artisan vendor:publish --tag=elasticsearch-views

计划中的功能

  • 根据文档站点区域设置设置分析器
  • 可配置的多匹配查询类型