punktde/elastic-nodesearchservice

使用Elasticsearch索引实现Neos NodeSearchServiceInterface

安装数: 19,295

依赖: 0

建议者: 0

安全: 0

星星: 10

关注者: 6

分支: 3

开放问题: 1

类型:neos-package

2.3.0 2022-07-06 09:49 UTC

This package is auto-updated.

Last update: 2024-09-06 14:27:55 UTC


README

Latest Stable Version Total Downloads

这是使用内容存储库的Elasticsearch索引实现Neos NodeSearchService的示例。如果您在项目中有很多节点,这将大大减少搜索-你输入-字段的后端查询时间。此外,它具有高度的定制性,以获得最佳的搜索体验。

可以定义多种搜索策略,然后根据搜索节点类型、起始点和术语选择。利用此功能,您可以在参考选择器中按发布日期对新闻文档进行排序,同时其他文档按字母顺序排序。

注意:虽然原始数据库搜索在文档的所有属性中执行like搜索,但此包的默认策略仅在标题字段中执行前缀搜索。请将其替换为适合您需求的搜索策略。

以下示例显示了包含23,000个文档的新闻文章参考选择器。

Example

安装

使用composer进行安装

composer require punktde/elastic-nodesearchservice

Flowpack.ElasticSearch.ContentRepositoryAdaptor 的兼容性

配置

示例

此示例使用多匹配前缀查询在为文档索引的 punktde_node_search 字段中进行搜索。

PunktDe:
  Elastic:
    NodeSearchService:
      logRequests: true
      searchStrategies:
        position: end
        titlePrefix:
          condition: '${Array.indexOf(searchNodeTypes, "Neos.Neos:Document")}'
          request:
            query:
              bool:
                filter:
                  bool:
                    minimum_should_match: 1
                    should:
                      - multi_match:
                          query: ARGUMENT_TERM
                          type: bool_prefix
                          fields: ['punktde_node_search', 'punktde_node_search._2gram', 'punktde_node_search._3gram']
		    must:
		      - terms:
			  neos_type_and_supertypes: ARGUMENT_SEARCHNODETYPES
		      - term:
			  neos_parent_path : ARGUMENT_STARTINGPOINT
		    must_not:
		      - term:
			  neos_hidden: true
            _source:
              - __path
            size: 20

position 确定了策略条件评估的顺序。

condition 是一个Eel查询,可以通过以下值进行参数化。它用于确定要使用的搜索策略。如果没有找到搜索策略,则回退到数据库搜索。

以下参数可用于搜索请求以参数化查询

提示:使用标记节点类型确定最佳搜索策略

有时,某些节点类型的参考编辑器可以从自定义搜索策略中受益。例如,仅列出可见并设置一定属性的文档节点。我们有限地确定搜索策略的选择,因此我们使用以下技巧

  1. 定义一个标记节点类型
'Vendor:SearchStrategyMarker.ListableEventSearch':
  abstract: true
  1. 在您的参考编辑器中使用此标记节点类型
    events:
      type: references
      ui:
        inspector:
          editorOptions:
            nodeTypes: ['Vendor:Documents.Event', 'Vendor:SearchStrategyMarker.ListableEventSearch']
  1. 在搜索策略条件中使用此节点类型
...
        eventSearchTitlePrefix:
          condition: '${Array.indexOf(searchNodeTypes, "Vendor:SearchStrategyMarker.ListableEventSearch") != -1}'
...