enables you to perform search queries using the PHP API.
The service should be injected into the constructor of your command or controller.
SearchService in the Back Office
SearchService is also used in the Back Office of eZ Platform,
in components such as Universal Discovery Widget or Sub-items List.
Performing a search¶
To search through Content you need to create a
and provide your search criteria as a series of Criterion objects.
For example, to search for all content of a selected Content Type, use one Criterion,
Criterion\ContentTypeIdentifier (line 14).
The following command takes the Content Type identifier as an argument and lists all results:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
SearchService::findContentInfo (line 16)
ContentInfo objects of the found Content items.
You can also use
SearchService::findContent to get full Content objects, together with their Field information.
To query for a single result, for example by providing a Content ID,
1 2 3
For full list and details of available Search Criteria, see Search Criteria reference.
Search result limit
By default search returns up to 25 results. You can change it by setting a different limit to the query:
You can use two properties of the
Query object to search for Content:
In contrast to
query has an effect of search scoring (relevancy).
It affects default sorting if no Sort Clause is used.
query is recommended when the search is based on user input.
The difference between
filter is only relevant when using Solr search engine.
With the Legacy search engine both properties will give identical results.
Searching in a controller¶
You can use the
SearchService similarly in a controller, as long as you provide the required parameters.
For example, in the code below
locationId is provided to list all children of a Location.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
The rendering of results is then relegated to templates (lines 20-22).
Paginating search results¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Pagination can then be rendered for example using the following template:
1 2 3 4 5 6 7
For more information and examples, see PagerFanta documentation.
|Adapter class name||Description|
||Makes a search against passed Query and returns Content objects.|
||Makes a search against passed Query and returns SearchHit objects instead.|
||Makes a Location search against passed Query and returns Location objects.|
||Makes a Location search against passed Query and returns SearchHit objects instead.|
For more complex searches, you need to combine multiple Criteria.
You can do it using logical operators:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
This example takes three parameters from a command —
It then combines them using
Criterion\LogicalAnd to search for Content items
that belong to a specific subtree, have the chosen Content Type and contain the provided text (lines 6-8).
This also shows that you can get the total number of search results using the
totalCount property of search results (line 11).
You can also nest different operators to construct more complex queries.
The example below uses the
LogicalNot operator to search for all children of the selected parent
that do not belong to the provided Content Type:
1 2 3 4 5 6 7
Combining independent Criteria¶
Criteria are independent of one another. This can lead to unexpected behavior, for instance because Content can have multiple Locations.
For example, a Content item has two Locations: visible Location A and hidden Location B. You perform the following query:
1 2 3 4
Even though the Location B is hidden, the query will find the Content because both conditions are satisfied:
- the Content item has Location B
- the Content item is visible (it has the visible Location A)
To sort the results of a query, use one of more Sort Clauses.
For example, to order search results by their publicationg date, from oldest to newest, and then alphabetically by content name, add the following Sort Clauses to the query:
1 2 3 4
For the full list and details of available Sort Clauses, see Sort Clause reference.
Checking feature support per search engine
Faceted search is available only for the Solr search engine.
To find out if a given search engine supports any of the advanced search capabilities,
Faceted search enables you to find the count of search results for each Facet value.
To do this, you need to make use of the query's
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
See Search Facet reference for details of all available Facets.