From 5d8ce968b279b5daae1bf775f69ee7698e6a258a Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 3 Jun 2017 14:43:42 +0200 Subject: [PATCH] Improve elasticsearch index --- app/config/config/fos_elastica.yml | 26 ++++++++++++------- .../Repository/Search/ModelRepository.php | 13 ++++++++-- .../Repository/Search/SetRepository.php | 21 ++++++++++++++- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/app/config/config/fos_elastica.yml b/app/config/config/fos_elastica.yml index 5e590be..cf08d7c 100644 --- a/app/config/config/fos_elastica.yml +++ b/app/config/config/fos_elastica.yml @@ -34,15 +34,20 @@ fos_elastica: types: set: mappings: - id: { analyzer: id_analyzer, search_analyzer: "standard" } + id: + type: "keyword" + fields: + ngrams: + type: 'text' + analyzer: id_analyzer name: { analyzer: name_analyzer, search_analyzer: "standard" } year: { type: integer } partCount: { type: integer } theme: type: "object" properties: - id: { analyzer: id_analyzer, search_analyzer: "standard" } - name: { analyzer: name_analyzer, search_analyzer: "standard" } + id: ~ +# name: { analyzer: name_analyzer, search_analyzer: "standard" } persistence: driver: orm model: AppBundle\Entity\Rebrickable\Set @@ -55,7 +60,12 @@ fos_elastica: delete: false model: mappings: - id: { analyzer: id_analyzer, search_analyzer: "standard" } + id: + type: "keyword" + fields: + ngrams: + type: 'text' + analyzer: id_analyzer name: { analyzer: name_analyzer, search_analyzer: "standard" } aliases: type: "object" @@ -64,7 +74,7 @@ fos_elastica: category: type: "object" properties: - id: { analyzer: id_analyzer, search_analyzer: "standard" } + id: ~ name: { analyzer: name_analyzer, search_analyzer: "standard" } keywords: type: "object" @@ -75,8 +85,4 @@ fos_elastica: model: AppBundle\Entity\LDraw\Model provider: ~ finder: ~ - repository: AppBundle\Repository\Search\ModelRepository - listener: - insert: false - update: false - delete: false \ No newline at end of file + repository: AppBundle\Repository\Search\ModelRepository \ No newline at end of file diff --git a/src/AppBundle/Repository/Search/ModelRepository.php b/src/AppBundle/Repository/Search/ModelRepository.php index 6c9d146..590536c 100644 --- a/src/AppBundle/Repository/Search/ModelRepository.php +++ b/src/AppBundle/Repository/Search/ModelRepository.php @@ -9,9 +9,11 @@ use FOS\ElasticaBundle\Repository; class ModelRepository extends Repository { /** + * Create search query from ModelSearch entity + * * @param ModelSearch $modelSearch * - * @return \Elastica\Query + * @return Query */ public function getSearchQuery(ModelSearch $modelSearch) { @@ -20,7 +22,7 @@ class ModelRepository extends Repository if ($searchQuery = $modelSearch->getQuery()) { $query = new Query\MultiMatch(); - $query->setFields(['name', 'id', 'aliases.id', 'keywords.name']); + $query->setFields(['name', 'id', 'id.ngrams', 'aliases.id', 'keywords.name']); $query->setQuery($searchQuery); $query->setFuzziness(0.7); $query->setMinimumShouldMatch('80%'); @@ -47,6 +49,13 @@ class ModelRepository extends Repository return $this->find($query, $limit); } + /** + * Find models by query with highlighted matched values + * + * @param string $query + * @param int $limit + * @return mixed + */ public function findHighlighted($query, $limit = 500) { $modelSearch = new ModelSearch(); diff --git a/src/AppBundle/Repository/Search/SetRepository.php b/src/AppBundle/Repository/Search/SetRepository.php index 226dbde..5d3d072 100644 --- a/src/AppBundle/Repository/Search/SetRepository.php +++ b/src/AppBundle/Repository/Search/SetRepository.php @@ -9,9 +9,15 @@ use Elastica\Query\Match; use Elastica\Query\Range; use FOS\ElasticaBundle\Repository; +/** + * Class SetRepository + * @package AppBundle\Repository\Search + */ class SetRepository extends Repository { /** + * Create search query from SetSearch entity + * * @param SetSearch $setSearch * * @return Query @@ -23,7 +29,7 @@ class SetRepository extends Repository if ($searchQuery = $setSearch->getQuery()) { $query = new Query\MultiMatch(); - $query->setFields(['name', 'id']); + $query->setFields(['name', 'id', 'id.ngrams']); $query->setQuery($searchQuery); $query->setFuzziness(0.7); $query->setMinimumShouldMatch('80%'); @@ -62,6 +68,11 @@ class SetRepository extends Repository return new Query($boolQuery); } + /** + * @param SetSearch $setSearch + * @param int $limit + * @return array + */ public function search(SetSearch $setSearch, $limit = 500) { $query = $this->getSearchQuery($setSearch); @@ -69,6 +80,14 @@ class SetRepository extends Repository return $this->find($query, $limit); } + + /** + * Find sets by query with highlighted matched values + * + * @param string $query + * @param int $limit + * @return mixed + */ public function findHighlighted($query, $limit = 500) { $setSearch = new SetSearch();