flowpack/searchplugin

内容节点搜索集成插件

安装量: 205,062

依赖: 1

建议者: 0

安全: 0

星标: 24

关注者: 8

分支: 31

开放问题: 6

类型:neos-package

5.3.3 2022-03-29 16:17 UTC

README

Latest Stable Version Total Downloads

本插件是一个搜索插件,与以下插件一起使用:

安装

使用composer与您喜欢的适配器安装

ElasticSearch

composer require flowpack/searchplugin flowpack/elasticsearch-contentrepositoryadaptor

SimpleSearch

composer require flowpack/searchplugin flowpack/simplesearch-contentrepositoryadaptor

从Flow 4.0开始,不再需要将此包的路由包含到您的主 Configuration/Routes.yaml 中。

配置

自定义索引名称

通常,为项目指定一个自定义索引名称是一个好主意,而不是默认的 typo3cr。这样,在多个项目使用同一Elasticsearch服务器时,就不会出现冲突。

要指定自定义索引名称,需要以下内容

Neos:
  ContentRepository:
    Search:
      elasticSearch:
        indexName: acmecom

分页

可以通过Fusion配置分页搜索结果。以下显示默认值

prototype(Flowpack.SearchPlugin:Search).configuration {
    itemsPerPage = 25
    insertAbove = false
    insertBelow = true
    maximumNumberOfLinks = 10
}

自定义结果渲染

结果列表使用类型为 nodeType + 'SearchResult' 的Fusion对象进行渲染,对于每个命中项都可以轻松调整渲染,例如对于假设的 Acme.AcmeCom:Product 节点类型

prototype(Acme.AcmeCom:ProductSearchResult) < prototype(Neos.Neos:DocumentSearchResult) {
    templatePath = 'resource://Acme.AcmeCom/Private/Templates/SearchResult/ProductSearchResult.html'
}

请随意使用Flowpack.SearchPlugin中的 DocumentSearchResult.html 作为示例。

搜索补全和建议

默认搜索表单模板带有指向此包的 SuggestControllerdata-autocomplete-source 属性。

要使用此术语建议器,需要按如下方式配置索引,以定义要使用的自定义分析器

Flowpack:
  ElasticSearch:
    indexes:
      default:      # client name used to connect (see Flowpack.ElasticSearch.clients)
        acmecom:    # your (custom) index name
          settings:
            analysis:
              filter:
                autocompleteFilter:
                  max_shingle_size: 5
                  min_shingle_size: 2
                  type: 'shingle'
              analyzer:
                autocomplete:
                  filter: [ 'lowercase', 'autocompleteFilter' ]
                  char_filter: [ 'html_strip' ]
                  type: 'custom'
                  tokenizer: 'standard'

然后需要配置要包含在建议构建中的节点类型,这可以这样完成

'Neos.Neos:Document':
  superTypes:
    'Flowpack.SearchPlugin:SuggestableMixin': true
    'Flowpack.SearchPlugin:AutocompletableMixin': true

'Neos.Neos:Shortcut':
  superTypes:
    'Flowpack.SearchPlugin:SuggestableMixin': false
    'Flowpack.SearchPlugin:AutocompletableMixin': false

'Neos.NodeTypes:TitleMixin':
  superTypes:
    'Flowpack.SearchPlugin:SuggestableMixin': true
    'Flowpack.SearchPlugin:AutocompletableMixin': true

通过通过 GET 请求通过 term 参数提供,SuggestController 将返回来自Elasticsearch的JSON编码建议数组。它们使用来自 _all 字段的术语建议器获取,即“全文索引”。

可以使用这些内容使用您选择的JS库在搜索输入中提供自动完成。如果您需要自己构建建议控制器的URI,此表单使用的是以下内容

{f:uri.action(action: 'index', controller: 'Suggest', package: 'Flowpack.SearchPlugin', format: 'json', absolute: 1, arguments: {contextNodeIdentifier: node.identifier, dimensionCombination: dimensionCombination})}

调整建议上下文

建议上下文确定是否在建议中显示结果。默认情况下,隐藏的节点将被排除。在许多项目中,搜索还考虑了 Neos.Seo metaRobotsNoindex 属性或排除了某些节点类型。为了调整建议上下文以符合您的搜索逻辑,您可以编写自己的自定义逻辑,并通过Objects.yaml切换 Flowpack\SearchPlugin\Suggestion\SuggestionContextInterface 的实现

为建议创建URI

要创建有效链接,可以使用以下包

将此包提供的示例与自定义Fusion对象连接

pathToProtoType = Your.Vendor:Content.NodeLink

最后,将新属性添加到插件设置中

Flowpack:
  SearchPlugin:
    searchAsYouType:
      suggestions:
        sourceFields:
          - title
          - __myProperty

AJAX搜索

默认情况下,插件包含一个可以通过以下方式访问的控制器,使用 GET

{f:uri.action(action: 'search', controller: 'AjaxSearch', package: 'Flowpack.SearchPlugin', arguments: {node: node, q: ''}, absolute: 1)}

它期望将搜索词作为名为 q 的参数(如 AjaxSearch.fusion 中定义的那样)进行传递。这个控制器渲染搜索结果,并以HTML格式返回,不包含任何页面模板。因此,它可以用于通过AJAX请求搜索结果,并在需要时将其添加到DOM中。

从搜索词中移除特殊字符

建议从搜索词中移除Elasticsearch中保留的字符,以防止错误。在提交搜索之前,可以使用eel辅助程序将它们替换,如下所示

prototype(Flowpack.SearchPlugin:Search) {
    searchTerm = ${Flowpack.SearchPlugin.SearchTerm.sanitize(request.arguments.search)}
}

请注意,如果您希望支持通配符(*)和短语搜索("search exactly this"),这将阻止用户显式使用这些功能。