punktde / elastic-nodesearchservice
使用Elasticsearch索引实现Neos NodeSearchServiceInterface
2.3.0
2022-07-06 09:49 UTC
Requires
- flowpack/elasticsearch-contentrepositoryadaptor: ^7.0 || ^8.0 || dev-master
- neos/flow: *
- neos/neos: ^5.0 || ^7.0 || ^8.0
README
这是使用内容存储库的Elasticsearch索引实现Neos NodeSearchService的示例。如果您在项目中有很多节点,这将大大减少搜索-你输入-字段的后端查询时间。此外,它具有高度的定制性,以获得最佳的搜索体验。
可以定义多种搜索策略,然后根据搜索节点类型、起始点和术语选择。利用此功能,您可以在参考选择器中按发布日期对新闻文档进行排序,同时其他文档按字母顺序排序。
注意:虽然原始数据库搜索在文档的所有属性中执行like搜索,但此包的默认策略仅在标题字段中执行前缀搜索。请将其替换为适合您需求的搜索策略。
以下示例显示了包含23,000个文档的新闻文章参考选择器。
安装
使用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查询,可以通过以下值进行参数化。它用于确定要使用的搜索策略。如果没有找到搜索策略,则回退到数据库搜索。
以下参数可用于搜索请求以参数化查询
提示:使用标记节点类型确定最佳搜索策略
有时,某些节点类型的参考编辑器可以从自定义搜索策略中受益。例如,仅列出可见并设置一定属性的文档节点。我们有限地确定搜索策略的选择,因此我们使用以下技巧
- 定义一个标记节点类型
'Vendor:SearchStrategyMarker.ListableEventSearch':
abstract: true
- 在您的参考编辑器中使用此标记节点类型
events:
type: references
ui:
inspector:
editorOptions:
nodeTypes: ['Vendor:Documents.Event', 'Vendor:SearchStrategyMarker.ListableEventSearch']
- 在搜索策略条件中使用此节点类型
...
eventSearchTitlePrefix:
condition: '${Array.indexOf(searchNodeTypes, "Vendor:SearchStrategyMarker.ListableEventSearch") != -1}'
...