kaliop/ezfindsearchenginebundle

Kaliop eZFind-Search-Engine Bundle

资助包维护!
tanoconsulting

安装: 96

依赖项: 0

建议者: 0

安全: 0

星标: 2

关注者: 3

分支: 1

开放问题: 0

类型:symfony-bundle

1.4.0 2018-12-18 19:06 UTC

README

本包引入了对遗留的eZFind搜索引擎的包装,使开发人员可以使用与eZ Publish 5中默认可用的相同搜索API。

功能

  • 通过简单地更改使用的一个服务名称,将现有的基于数据库的内容搜索与基于solr的搜索交换
  • 支持大多数来自eZPublish内核的查询条件和排序子句
  • 允许从搜索中获取eZ5内容对象或原始solr数据(以eZFind解码和SOLR原生格式均可)
  • 允许按分数排序
  • 支持分面
  • 允许对查询条件和排序子句使用自定义的SOLR语法
  • 与SolrSearchEngineBundle不同,接管所有现有的内容搜索
  • 针对执行速度和内存使用进行优化(在不摧毁eZFind的情况下尽可能多)

设置

安装

您可以使用Composer安装此包

composer require kaliop/ezfindsearchenginebundle

然后在其内核中启用它。

配置

默认情况下,该包已完全配置。以下是可用参数的完整列表及示例值

    ezfind_search_engine.search_settings.boost_functions:
        - 'recip(ms(NOW/HOUR,attr_publication_date_dt),4e-12,1000,2)'
    # default list of fields returned when *not* returning Contents
    ezfind_search_engine.search_settings.fields_to_return:
        - meta_name_t
        - meta_owner_name_t
        - meta_path_string_ms
        - meta_priority_si
        - meta_score_value:score # Score field needs to be renamed as it won't be passed from eZFind
    # in case you want to use an alternative 'legacy fetch function' to power the search service. The default is ezfind/search
    ezfind_search_engine.search_settings.legacy_function_handler.module_name: 'ezfind'
    ezfind_search_engine.search_settings.legacy_function_handler.function_name: 'search'

使用

使用此包的最简单方法是简单地交换您用于现有查询的搜索服务

    ...

对于更高级的功能,您可以交换查询对象与更具体的类之一。这允许您设置更多的查询参数,例如,通过禁用不需要的功能来加速查询的执行

    ...

分面

目前,该包实现了以下FacetBuilders

use eZ\Publish\API\Repository\Values\Content\Query\FacetBuilder;
use Kaliop\EzFindSearchEngineBundle\API\Repository\Values\Content\Query\FacetBuilder as KaliopFacetBuilder;
 
$now = new DateTime();
$yearAgo = new DateTime();
$yearAgo->modify('-1 year');
 
$query->facetBuilders = [
    // Kaliop Facet Builders
    new KaliopFacetBuilder\FieldRangeFacetBuilder([
        'name' => 'Numeric field range facet',
        'fieldPath' => 'product/price',
        'start' => 100,
        'end' => 500,
        'gap' => 50,
        'limit' => 8,
    ]),
    new KaliopFacetBuilder\DateRangeFacetBuilder([
        'name' => 'Date range facet',
        'fieldPath' => 'article/publication_date',
        'start' => $yearAgo,
        'end' => $now,
        'gap' => new DateInterval('P1M'),
        'limit' => 12,
    ]),
    // Base eZ Facet Builders
    new FacetBuilder\FieldFacetBuilder([
        'name' => 'Simple field facet',
        'fieldPaths' => 'article/title',
        'limit' => 20,
    ]),
    new FacetBuilder\FieldFacetBuilder([
        'name' => 'Object relation(s) facet',
        'fieldPaths' => 'article/author/id',
        'limit' => 20,
    ]),
    new FacetBuilder\ContentTypeFacetBuilder([
        'name' => 'Content type facet',
    ]),
    new FacetBuilder\CriterionFacetBuilder([
        'name' => 'Criterion facet',
        'filter' => new Criterion\Field('article/title', Criterion\Operator::CONTAINS, 'new'),
    ]),
];

扩展包

标记服务/标准

该包利用一系列'处理器'将搜索查询转换为要发送到Solr的遗留搜索配置。

您可以使用标记服务添加更多自定义处理器,以下标签

ezfind_search_engine.content.criterion_handler.filter

这些将转换要添加到eZFind调用"过滤器"部分的准则(或在按分数排序时转换为查询字符串)

ezfind_search_engine.content.sort_clause_handler

这些将转换排序子句

故障排除

...

常见问题解答

  • “位置搜索”是否在当前包中实现?答:鉴于eZFind使用的SOLR模式,除非您根本不使用具有多个位置的内容,否则无法可靠地实现“位置搜索”。对此表示歉意。

  • 此包与从eZPublish 5以来可用的'SolrSearchEngineBundle'有何区别?答1:此包使用与ezfind相同的SOLR模式。因此,它与遗留内核100%兼容。答2:此包不接管来自eZPublish存储库的标准搜索服务。由开发人员决定将哪些查询发送到数据库,哪些发送到SOLR。

  • 为什么我看到所有结果都有相同的score?答:当您不按分数排序结果时,该包通过使用纯'过滤器查询'来优化性能(这应该很好,因为Solr缓存过滤器)。这意味着所有搜索命中都获得相同的分数。

  • 使用 $query->filter$query->query 有什么区别吗?答:如果您不是按得分排序结果,则没有区别。当您按得分排序结果时,为了获得最佳性能,应使用 $query->query 对所有影响评分的准则(例如搜索词)进行排序,并使用 $query->filter 对所有其他准则(例如内容类型限制、部分限制等)进行排序。

  • 我在命令行脚本中尝试使用新的搜索服务,但总是返回无结果。答:在命令行脚本中启动 eZPublish 旧版内核的方式存在一个错误。我们提供了一种替代实现,可以通过编辑服务来激活。

谢谢

特别感谢 SOkamoto(是他让这一切开始)、CRevillo、DClements、MIwaniak、SKlimaszewski

License Latest Stable Version Total Downloads

Scrutinizer Code Quality