PHPackages                             kaliop/ezfindsearchenginebundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. kaliop/ezfindsearchenginebundle

ActiveSymfony-bundle[Search &amp; Filtering](/categories/search)

kaliop/ezfindsearchenginebundle
===============================

Kaliop eZFind-Search-Engine Bundle

1.4.0(7y ago)2961GPL-2.0PHPPHP &gt;=5.6CI failing

Since Apr 12Pushed 5y ago2 watchersCompare

[ Source](https://github.com/kaliop-uk/ezfindsearchenginebundle)[ Packagist](https://packagist.org/packages/kaliop/ezfindsearchenginebundle)[ RSS](/packages/kaliop-ezfindsearchenginebundle/feed)WikiDiscussions master Synced today

READMEChangelog (5)Dependencies (5)Versions (10)Used By (0)

Kaliop eZFind Search Engine Bundle
==================================

[](#kaliop-ezfind-search-engine-bundle)

This bundle introduces a wrapper around the legacy eZFind search engine, making it available to developers with the same search API available by default in eZ Publish 5.

Features
--------

[](#features)

- swap existing database-based content searches with solr-based searches by simply changing the name of *one* service used
- supports most of the query criteria and sort clauses from the eZPublish kernel
- allows to get back from searches either eZ5 Content objects or raw solr data (in both eZFind-decoded and SOLR-native format)
- allows to sort by score
- supports facetting
- allows to use custom SOLR syntax for both query criteria and sort clauses
- unlike the SolrSearchEngineBundle, does *not* overtake all existing content searches
- optimized for speed of execution and memory usage (as much as we can without nuking eZFind)

Setup
-----

[](#setup)

### Installation

[](#installation)

You can install the bundle using Composer:

```
composer require kaliop/ezfindsearchenginebundle

```

and then enabling it in your kernel.

### Configuration

[](#configuration)

The bundle comes fully configured by default. Here the complete list of parameters available with example values:

```
    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'
```

Usage
-----

[](#usage)

The simplest way to use this bundle is to simply swap the Search Service that you use for existing queries with the new one:

```
    ...
```

For more advanced features, you can swap the Query object with one of a more specific class. This allows you to set more query parameters, f.e. to speed up the execution of the query by disabling unneeded features

```
    ...
```

### Facets

[](#facets)

Currently the following FacetBuilders are implemented by the bundle:

```
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'),
    ]),
];
```

Extending the bundle
--------------------

[](#extending-the-bundle)

### Tagged Services / Criteria

[](#tagged-services--criteria)

The bundle utilises a series of 'handlers' to convert the search Query into legacy search configuration to be sent to Solr.

You can add more custom handlers using tagged services, with the following tags:

#### `ezfind_search_engine.content.criterion_handler.filter`

[](#ezfind_search_enginecontentcriterion_handlerfilter)

These are supposed to convert criteria that will be added to the "filter" section of the eZFind call (or to the query string when sorting by score)

#### `ezfind_search_engine.content.sort_clause_handler`

[](#ezfind_search_enginecontentsort_clause_handler)

These are supposed to convert sort clauses

Troubleshooting
---------------

[](#troubleshooting)

...

FAQ
---

[](#faq)

- Is 'Location Search' implemented in this bundle? A: given the SOLR schema used by eZFind, it is not possible to implement 'Location Search' reliably unless you use no multi-located contents whatsoever. Sorry about that
- What is the difference between this bundle and the 'SolrSearchEngineBundle' available since eZPublish 5? A1: this bundle uses the same SOLR schema as ezfind. It is thus 100% compatible with the Legacy kernel A2: this bundle does not overtake the standard Search service from the eZPublish repository. It is up to the developer to decide which queries to send to the database and which ones to send to SOLR.
- Why do I see the same `score` for all results? A: when you are not sorting results by score, the bundle optimizes performances by using a pure 'filter query' for the Solr request (this should be good because Solr caches filters). This means that all search hits get the same score.
- Is there any difference between using `$query->filter` and `$query->query`? A: when you are not sorting results by score, none. When you are sorting results by score, you should use for optimal performaces `$query->query` for all criteria that influence the scoring (eg. a search term), and `$query->filter` for all other criteria (eg limitations on content type, section, etc...)
- I tried using the new search service in a command line script but I always get back no results A: there is a bug in the way the eZPublish legacy kernel is booted in command line scripts. We provide as courtesy an alternative implementation that can be activated by editing the services

Thanks
------

[](#thanks)

Special tahnks to SOkamoto (who got this all started), CRevillo, DClements, MIwaniak, SKlimaszewski

[![License](https://camo.githubusercontent.com/d3c91a72ab73d3b77f8c1fed5c7015c08e7ac2a2bbc71010e3f7c7abc31613d8/68747470733a2f2f706f7365722e707567782e6f72672f6b616c696f702f657a66696e64736561726368656e67696e6562756e646c652f6c6963656e7365)](https://packagist.org/packages/kaliop/ezfindsearchenginebundle)[![Latest Stable Version](https://camo.githubusercontent.com/13b18b155517f54f2845bec3bd898d9d8d25edb0ef95ca9a1528d0138bb0dcb9/68747470733a2f2f706f7365722e707567782e6f72672f6b616c696f702f657a66696e64736561726368656e67696e6562756e646c652f762f737461626c65)](https://packagist.org/packages/kaliop/ezfindsearchenginebundle)[![Total Downloads](https://camo.githubusercontent.com/ce34d143ba4d3fdec29ef19121aa96c9c85b1a464a6ee1c0e9296c96f50d3b0c/68747470733a2f2f706f7365722e707567782e6f72672f6b616c696f702f657a66696e64736561726368656e67696e6562756e646c652f646f776e6c6f616473)](https://packagist.org/packages/kaliop/ezfindsearchenginebundle)

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/648ec093246701aa6072c5057f72e7b4f3f372ba3fe36d0545217f6b0fa1b826/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6b616c696f702d756b2f657a66696e64736561726368656e67696e6562756e646c652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/kaliop-uk/ezfindsearchenginebundle/?branch=master)

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 66.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~55 days

Total

5

Last Release

2702d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f641f7d6edabf83c56f6c4998b04e6c59a00b46bf51ca6699c31b09f9c948677?d=identicon)[gggeek](/maintainers/gggeek)

---

Top Contributors

[![sklimaszewski](https://avatars.githubusercontent.com/u/15861042?v=4)](https://github.com/sklimaszewski "sklimaszewski (12 commits)")[![gggeek](https://avatars.githubusercontent.com/u/308634?v=4)](https://github.com/gggeek "gggeek (6 commits)")

---

Tags

ezfindezplatformezpublishfaceted-searchsearchsolrsearchsolrezpublishezfind

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/kaliop-ezfindsearchenginebundle/health.svg)

```
[![Health](https://phpackages.com/badges/kaliop-ezfindsearchenginebundle/health.svg)](https://phpackages.com/packages/kaliop-ezfindsearchenginebundle)
```

###  Alternatives

[solarium/solarium

PHP Solr client

93532.7M98](/packages/solarium-solarium)[netgen/query-translator

Query Translator is a search query translator with AST representation

2042.0M6](/packages/netgen-query-translator)[nelmio/solarium-bundle

Integration with solarium solr client.

1493.0M12](/packages/nelmio-solarium-bundle)[apache-solr-for-typo3/solr

Apache Solr for TYPO3 - Apache Solr for TYPO3 is the enterprise search server you were looking for with special features such as Faceted Search or Synonym Support and incredibly fast response times of results within milliseconds.

1473.0M32](/packages/apache-solr-for-typo3-solr)[floriansemm/solr-bundle

Symfony Solr integration bundle

12280.2k2](/packages/floriansemm-solr-bundle)[cmsig/seal

Search Engine Abstraction Layer

32207.9k53](/packages/cmsig-seal)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
