3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+
6
7
namespace Magento \Elasticsearch \Elasticsearch5 \SearchAdapter ;
7
8
8
9
use Magento \Framework \App \ObjectManager ;
12
13
use Magento \Elasticsearch \SearchAdapter \Aggregation \Builder as AggregationBuilder ;
13
14
use Magento \Elasticsearch \SearchAdapter \ConnectionManager ;
14
15
use \Magento \Elasticsearch \SearchAdapter \ResponseFactory ;
16
+ use Psr \Log \LoggerInterface ;
15
17
16
18
/**
17
19
* Elasticsearch Search Adapter
@@ -47,25 +49,56 @@ class Adapter implements AdapterInterface
47
49
*/
48
50
private $ queryContainerFactory ;
49
51
52
+ /**
53
+ * Empty response from Elasticsearch.
54
+ *
55
+ * @var array
56
+ */
57
+ private static $ emptyRawResponse = [
58
+ "hits " =>
59
+ [
60
+ "hits " => []
61
+ ],
62
+ "aggregations " =>
63
+ [
64
+ "price_bucket " => [],
65
+ "category_bucket " =>
66
+ [
67
+ "buckets " => []
68
+
69
+ ]
70
+ ]
71
+ ];
72
+
73
+ /**
74
+ * @var LoggerInterface
75
+ */
76
+ private $ logger ;
77
+
50
78
/**
51
79
* @param ConnectionManager $connectionManager
52
80
* @param Mapper $mapper
53
81
* @param ResponseFactory $responseFactory
54
82
* @param AggregationBuilder $aggregationBuilder
55
83
* @param \Magento\Elasticsearch\SearchAdapter\QueryContainerFactory $queryContainerFactory
84
+ * @param LoggerInterface $logger
56
85
*/
57
86
public function __construct (
58
87
ConnectionManager $ connectionManager ,
59
88
Mapper $ mapper ,
60
89
ResponseFactory $ responseFactory ,
61
90
AggregationBuilder $ aggregationBuilder ,
62
- \Magento \Elasticsearch \SearchAdapter \QueryContainerFactory $ queryContainerFactory
63
- ) {
91
+ \Magento \Elasticsearch \SearchAdapter \QueryContainerFactory $ queryContainerFactory ,
92
+ LoggerInterface $ logger = null
93
+ )
94
+ {
64
95
$ this ->connectionManager = $ connectionManager ;
65
96
$ this ->mapper = $ mapper ;
66
97
$ this ->responseFactory = $ responseFactory ;
67
98
$ this ->aggregationBuilder = $ aggregationBuilder ;
68
99
$ this ->queryContainerFactory = $ queryContainerFactory ;
100
+ $ this ->logger = $ logger ?: ObjectManager::getInstance ()
101
+ ->get (LoggerInterface::class);
69
102
}
70
103
71
104
/**
@@ -78,23 +111,12 @@ public function query(RequestInterface $request)
78
111
$ aggregationBuilder = $ this ->aggregationBuilder ;
79
112
$ query = $ this ->mapper ->buildQuery ($ request );
80
113
$ aggregationBuilder ->setQuery ($ this ->queryContainerFactory ->create (['query ' => $ query ]));
81
- if ( $ client -> indexExists ( $ query [ ' index ' ])) {
114
+ try {
82
115
$ rawResponse = $ client ->query ($ query );
83
- } else {
84
- $ rawResponse = [
85
- "hits " =>
86
- [
87
- "hits " => []
88
- ],
89
- "aggregations " =>
90
- [
91
- "price_bucket " => [],
92
- "category_bucket " =>
93
- [
94
- "buckets " => []
95
- ]
96
- ]
97
- ];
116
+ } catch (\Exception $ e ) {
117
+ $ this ->logger ->critical ($ e );
118
+ // return empty search result in case an exception is thrown from Elasticsearch
119
+ $ rawResponse = self ::$ emptyRawResponse ;
98
120
}
99
121
$ rawDocuments = isset ($ rawResponse ['hits ' ]['hits ' ]) ? $ rawResponse ['hits ' ]['hits ' ] : [];
100
122
$ queryResponse = $ this ->responseFactory ->create (
0 commit comments