跳转到主要内容

Plone搜索集成:用于在Open-/ElasticSearch中索引内容的插件

项目描述

Plone 内容的 OpenSearch 或 ElasticSearch 集成。

它包括以下部分

  • 索引器将内容传递给一个独立运行的 collective.elastic.ingest 服务。

  • 目录索引作为 Open-/ElasticSearch 的代理,与 ZCatalog 集成。即用作 SearchableText 索引的替代。

  • 为 plone.restapi 定制的插件,为摄取服务提供结构信息

  • REST API 端点 @kitsearch 接受 Open-/ElasticSearch 查询,返回带有 Plone 权限检查的结果。

安装

先决条件

您需要一个正在运行的 collective.elastic.ingest (版本 2.x) 服务。这暗示有一个正在运行的 Redis 实例和一个正在运行的 Open- 或 ElasticSearch 实例。

mxdev/mxmake

collective.elastic.plone[redis,opensearch]>=2.0.0b11 添加到您的 requirements.txt 中(或者使用 constraints.txt 进行版本锁定)。

额外的需求是用于队列服务器和索引服务器的需求,可能不同,见下文。或者将其添加到您的 pyproject.toml 作为依赖项(或者对于旧代码到 setup.[py|cfg])。

在 Plone 启动前,在您的后端目录中提供并 一个环境变量文件(例如 .env)。

export INDEX_SERVER=localhost:9200
export INDEX_USE_SSL=1
export INDEX_OPENSEARCH=1
export INDEX_LOGIN=admin
export INDEX_PASSWORD=admin
export INDEX_NAME=plone
export CELERY_BROKER=redis://127.0.0.1:6379/0

Buildout

通过将其添加到 buildout 来安装 collective.elastic.plone[redis,opensearch]。额外的需求是用于队列服务器和索引服务器的需求可能不同,见下文。环境也可能不同。也请参见下文。

[buildout]

# ...

eggs =
    # ...
    collective.elastic.plone[redis,opensearch]

environment-vars +=
    INDEX_SERVER=localhost:9200
    INDEX_USE_SSL=1
    INDEX_OPENSEARCH=1
    INDEX_LOGIN=admin
    INDEX_PASSWORD=admin
    INDEX_NAME=plone
    CELERY_BROKER=redis://127.0.0.1:6379/0

[versions]
collective.elastic.plone = 2.0.0

然后运行 bin/buildout

额外需求

根据使用的队列服务器和索引服务器,额外的需求可能不同

  • 队列服务器: redisrabbitmq

  • 索引服务器: opensearchelasticsearch

启动后

启动后,您需要通过 Addons 控制面板在 Plone 中安装插件。这用代理索引替换了 SearchableText 索引,并具有最小配置。最好是根据项目需求更改配置。

要将所有内容索引到目录中,请将 /@@update-index-server-index 添加到您的 Plone 网站的 URL。这将所有内容排队索引到 ElasticSearch(但不在 ZCatalog 中)。或者,重新索引目录(在 ZMI 的高级选项卡下)也行。

新内容或修改后的内容会自动排队索引。

Volto 前端

代理索引在 Volto 中开箱即用。

然而,在 Volto 中,可以通过使用 @kitsearch 端点进行直接(并且更快)的搜索,绕过目录。该端点接受原生的 Open-/ElasticSearch 查询,并返回带有 Plone 权限检查的结果。

Volto 扩展插件 volto-searchkit-block 使用此端点提供了一个可配置的块。

备注:出于安全原因,在 collective.elastic.plone 2.0.0 中,@kitsearch 端点始终使用环境配置的值覆盖任何“API URL”和“API 索引”设置。

配置

全局配置通过环境变量完成。

每个目录代理索引都有自己的 JSON 配置。

环境

环境变量是

INDEX_SERVER

ElasticSearch 或 OpenSearch 服务器的 URL。

默认:localhost:9200

INDEX_NAME

在ElasticSearch或OpenSearch服务中使用的索引名称。

默认值:plone

INDEX_USE_SSL

是否使用安全连接。

默认值:0

INDEX_OPENSEARCH

是否使用OpenSearch或ElasticSearch。

默认值:1

INDEX_LOGIN

ElasticSearch 8+或OpenSearch 2服务器的用户名。对于Plone插件,读权限就足够了。

默认值:admin

INDEX_PASSWORD

上述用户的密码

默认值:admin

CELERY_BROKER

Celery的代理URL。有关详细信息,请参阅docs.celeryq.dev

默认值:redis://127.0.0.1:6379/0

代理索引

通过网页,可以在Zope管理界面(ZMI)下的portal_catalog中配置proxy-index,然后点击ElasticSearchProxyIndex(即SearchableText)。

在文件系统中,可以通过使用GenericSetup配置文件和将catalog.xml文件放入其中来配置,就像在portal_catalog工具中配置任何其他索引一样。

<index meta_type="ElasticSearchProxyIndex"
        name="SearchableText"
>
    <querytemplate>
{
    "query": {
        "multi_match": {
            "query": "{{keys[0]}}",
            "fields": [
                "title*^1.9",
                "description*^1.5",
                "text.data*^1.2",
                "blocks_plaintext*^1.2"
                "file__extracted.content*"
            ],
            "analyzer": "{{analyzer}}","operator": "or",
            "fuzziness": "AUTO",
            "prefix_length": 1,
            "type": "most_fields",
            "minimum_should_match": "75%"
        }
    }
}
    </querytemplate>
</index>

它使用Jinja2模板将搜索词注入查询。可用的变量有

keys

一个搜索词列表,通常只有一个。

language

门户的当前语言

analyzer

基于语言的查询分析器的名称。目前这是硬编码的。如果没有为语言提供分析器,则使用standard分析器。

生成的查询需要是一个有效的OpenSearch Query DSLElasticSearch Query DSL文本。

源代码

源代码存储在GIT版本控制系统中,主要分支位于github。你可以在那里报告问题。

我们很高兴看到许多分叉和pull-requests来使此插件变得更好。

维护者是Jens KleinPeter Holzer和BlueDynamics Alliance开发团队。我们感谢任何贡献,如果需要在PyPI上发布版本,请与我们中的任何一位联系。如果需要任何培训、辅导、集成或修改,我们还提供商业支持。

使用Github Release功能和PyPI受信任的发布来发布版本。绝不要使用不同的发布流程!如有疑问,请咨询Jens。

贡献

想法和测试:Peter Holzer

初始概念和代码:Jens W. Klein(Github: @jensens)

贡献者

  • Katja Süss(Github: @ksuess)

许可证

该项目采用GPLv2许可。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源代码分发

collective_elastic_plone-2.1.1.tar.gz (39.1 kB 查看散列)

上传于

构建版本

collective.elastic.plone-2.1.1-py3-none-any.whl (40.8 kB 查看哈希)

上传于 Python 3

由以下支持