-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathProductIndex.php
55 lines (46 loc) · 1.5 KB
/
ProductIndex.php
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
declare(strict_types=1);
namespace App\Elasticsearch\Index\Product;
use App\Elasticsearch\Index\Product\Document\ProductIndexDocument;
use Elastica\Query\BoolQuery;
use Elastica\Query\MatchQuery;
use Elastica\Query\MultiMatch;
use Pimcore\Model\DataObject\Product;
use Valantic\ElasticaBridgeBundle\Document\DocumentInterface;
use Valantic\ElasticaBridgeBundle\Enum\DocumentType;
use Valantic\ElasticaBridgeBundle\Index\AbstractTenantAwareIndex;
class ProductIndex extends AbstractTenantAwareIndex
{
public const ATTRIBUTE_CATEGORIES = 'categories';
public function getTenantUnawareName(): string
{
return 'product';
}
public function getAllowedDocuments(): array
{
return [
ProductIndexDocument::class,
];
}
public function filterByLocaleAndQuery(string $locale, string $query): BoolQuery
{
return (new BoolQuery())
->addMust(
(new MultiMatch())
->setFields([
sprintf('%s.%s.*', DocumentInterface::ATTRIBUTE_LOCALIZED, $locale),
])
->setQuery($query)
)
->addFilter(new MatchQuery(DocumentInterface::META_TYPE, DocumentType::DATA_OBJECT->value))
->addFilter(new MatchQuery(DocumentInterface::META_SUB_TYPE, Product::class));
}
public function getTenants(): array
{
return ['acme'];
}
public function getDefaultTenant(): string
{
return 'acme';
}
}