From 9836edfb58d784c2b5126a743fbc5c8dae189078 Mon Sep 17 00:00:00 2001 From: Kyle Huynh Date: Mon, 6 Dec 2021 10:22:00 -0500 Subject: [PATCH] Added search with wildcard (with ? and *) --- src/AdvancedSearchQuery.php | 43 ++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/src/AdvancedSearchQuery.php b/src/AdvancedSearchQuery.php index 9c67f58..33606e3 100644 --- a/src/AdvancedSearchQuery.php +++ b/src/AdvancedSearchQuery.php @@ -163,22 +163,41 @@ class AdvancedSearchQuery { $q = implode(' ', $q); /** @var Solarium\QueryType\Select\Query\Query $solarium_query */ - // enable dismax search query option - /** @var Solarium\QueryType\Select\Query\Component\DisMax $dismax */ - $dismax = $solarium_query->getDisMax(); - $dismax->setQueryParser('edismax'); - $query_fields = []; - foreach ($field_mapping as $key => $field) { - foreach ($field as $f => $item) { - if (strpos($item, 'sticky') === false) { - array_push($query_fields, $item); + if ((strpos($q, "*") !== false || strpos($q, "?") !== false)) { + // enable wildcard + $tmp = str_replace('"', "", trim($q)); + $query_fields = []; + foreach ($field_mapping as $key => $field) { + foreach ($field as $f => $item) { + if (strpos($item, 'sticky') === false && !in_array($item, ['score', 'random', 'boost_document']) + && ((strpos( $item, "sm_" ) === 0) || (strpos( $item, "tm_" ) === 0) || (strpos($item, "sort_ss_") === 0) || (strpos($item, "ts_") === 0) + || (strpos($item, "ss_") === 0) + )){ + array_push($query_fields, '('.$item. ':'. $tmp .')'); + } } } + $q = implode(" ", array_unique($query_fields)); + } + else { + + // enable dismax search query option + /** @var Solarium\QueryType\Select\Query\Component\DisMax $dismax */ + $dismax = $solarium_query->getDisMax(); + $dismax->setQueryParser('edismax'); + $query_fields = []; + foreach ($field_mapping as $key => $field) { + foreach ($field as $f => $item) { + if (strpos($item, 'sticky') === false) { + array_push($query_fields, $item); + } + } + } + $query_fields = implode(" ", array_unique($query_fields)); + $dismax->setQueryFields($query_fields); } - $query_fields = implode(" ", array_unique($query_fields)); - $dismax->setQueryFields($query_fields); $solarium_query->setQuery($q); - } + } } /**