-
Notifications
You must be signed in to change notification settings - Fork 98
Search
The search method returns a SearchResult
instance.
public function search($query, array $searchParams = [], array $options = [])
$query
: the query words.
$searchParams
: the search parameters handled by MeiliSearch.
$options
: options you can pass during the search. There are described in the options section.
💡 If you don't want the search
method to return a class instance, use the rawSearch()
method or set raw
to true
in the $options
parameter. No instance class will be created during the process which might improve the performances in some situations.
All the supported parameters are described in the search parameters section of the documentation.
You will be able to filter, use facets, restrict the fields to retrieve...
With filters
, both single and double quotes are supported.
// Enclosing with double quotes
$index->search('prince', $searchParams = ['filters' => "title = 'Le Petit Prince' OR author = 'J. R. R. Tolkien'"]);
// Enclosing with single quotes
$index->search('hobbit', $searchParams = ['filters' => 'title = "The Hitchhiker\'s Guide to the Galaxy" OR author = "J. R. R. Tolkien"']);
Here are the different options you can pass in the $options
parameter.
Default: false
Remove the facetsDistribution
values that are equal to zero returned by MeiliSearch.
More about the Faceted Search.
$index->search(
'prince',
$searchParams = ['facetsDistribution' => ['genre']],
$options = [removeZeroFacets => true]
);
// With removeZeroFacets = false
// "facetsDistribution": {
// "genre": {
// "horror: 443,
// "thriller": 200,
// "comedy": 0
// }
// }
// With removeZeroFacets = true
// "facetsDistribution": {
// "genre": {
// "horror: 443,
// "thriller": 200,
// }
// }
The callback that will be applied to the facetsDistribution
array returned by MeiliSearch.
$facetsToUpperFunc = function (array $facets) {
$changeOneFacet = function (array $facet) {
$result = [];
foreach ($facet as $k => $v) {
$result[strtoupper($k)] = $v;
}
return $result;
};
return array_map($changeOneFacet, $facets);
};
$response = $this->index->search(
'prince',
['facetsDistribution' => ['genre']],
['transformFacetsDistribution' => $facetsToUpperFunc]
);
The callback that will be applied to the hits
array returned by MeiliSearch.
// Before PHP 7.4
function titlesToUpperCase(array $hits) {
return array_map($hits, function (array $hit) {
$hit['title'] = strtoupper($hit['title']);
return $hit;
});
}
// PHP 7.4 and later
function titlesToUpperCase(array $hits) {
return array_map($hits, function (array $hit) {
return [
...$hit,
title: strtoupper($hit['title']
]
});
}
$index->search('prince', $searchParams = [], $options = ['transformHits' => 'titlesToUpperCase'])
Default: false
The search()
will return the raw information returned by the MeiliSearch server in an Array
. No class instance will be created.
$index->search('prince', $searchParams = [], $options = [raw => true]);
If you only want to get an Array
with your transformed hits
and facetsDistribution
, please use toArray
instead:
$index->search(
'prince',
$searchParams = ['facetsDistribution' => ['genre']],
$options = [removeZeroFacets => true]
)->toArray();
- Oder your
facetsDistribution
by alphanumerical order:
$facetsToUpperFunc = function (array $facets) {
$sortOneFacet = function (array $facet) {
ksort($facet);
return $facet;
};
return array_map($sortOneFacet, $facets);
};
$response = $this->index->search(
'prince,
['facetsDistribution' => ['genre']],
['transformFacetsDistribution' => $facetsToUpperFunc]
);
- To remove some specifics hits in the results:
$removeLePetitPrince = function (array $hits) {
return array_filter(
$hits,
function (array $hit) { 'Le Petit Prince' !== $hit['title']; }
);
};
$response = $index->search('prince', $searchParams = [], $options = ['transformHits' => $removeLePetitPrince]);