1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-21 06:30:10 -07:00

Improve elasticsearch index

This commit is contained in:
Unknown 2017-06-03 14:43:42 +02:00
parent b6b5b50435
commit 5d8ce968b2
3 changed files with 47 additions and 13 deletions

View File

@ -34,15 +34,20 @@ fos_elastica:
types: types:
set: set:
mappings: 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" } name: { analyzer: name_analyzer, search_analyzer: "standard" }
year: { type: integer } year: { type: integer }
partCount: { type: integer } partCount: { type: integer }
theme: theme:
type: "object" type: "object"
properties: properties:
id: { analyzer: id_analyzer, search_analyzer: "standard" } id: ~
name: { analyzer: name_analyzer, search_analyzer: "standard" } # name: { analyzer: name_analyzer, search_analyzer: "standard" }
persistence: persistence:
driver: orm driver: orm
model: AppBundle\Entity\Rebrickable\Set model: AppBundle\Entity\Rebrickable\Set
@ -55,7 +60,12 @@ fos_elastica:
delete: false delete: false
model: model:
mappings: 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" } name: { analyzer: name_analyzer, search_analyzer: "standard" }
aliases: aliases:
type: "object" type: "object"
@ -64,7 +74,7 @@ fos_elastica:
category: category:
type: "object" type: "object"
properties: properties:
id: { analyzer: id_analyzer, search_analyzer: "standard" } id: ~
name: { analyzer: name_analyzer, search_analyzer: "standard" } name: { analyzer: name_analyzer, search_analyzer: "standard" }
keywords: keywords:
type: "object" type: "object"
@ -75,8 +85,4 @@ fos_elastica:
model: AppBundle\Entity\LDraw\Model model: AppBundle\Entity\LDraw\Model
provider: ~ provider: ~
finder: ~ finder: ~
repository: AppBundle\Repository\Search\ModelRepository repository: AppBundle\Repository\Search\ModelRepository
listener:
insert: false
update: false
delete: false

View File

@ -9,9 +9,11 @@ use FOS\ElasticaBundle\Repository;
class ModelRepository extends Repository class ModelRepository extends Repository
{ {
/** /**
* Create search query from ModelSearch entity
*
* @param ModelSearch $modelSearch * @param ModelSearch $modelSearch
* *
* @return \Elastica\Query * @return Query
*/ */
public function getSearchQuery(ModelSearch $modelSearch) public function getSearchQuery(ModelSearch $modelSearch)
{ {
@ -20,7 +22,7 @@ class ModelRepository extends Repository
if ($searchQuery = $modelSearch->getQuery()) { if ($searchQuery = $modelSearch->getQuery()) {
$query = new Query\MultiMatch(); $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->setQuery($searchQuery);
$query->setFuzziness(0.7); $query->setFuzziness(0.7);
$query->setMinimumShouldMatch('80%'); $query->setMinimumShouldMatch('80%');
@ -47,6 +49,13 @@ class ModelRepository extends Repository
return $this->find($query, $limit); 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) public function findHighlighted($query, $limit = 500)
{ {
$modelSearch = new ModelSearch(); $modelSearch = new ModelSearch();

View File

@ -9,9 +9,15 @@ use Elastica\Query\Match;
use Elastica\Query\Range; use Elastica\Query\Range;
use FOS\ElasticaBundle\Repository; use FOS\ElasticaBundle\Repository;
/**
* Class SetRepository
* @package AppBundle\Repository\Search
*/
class SetRepository extends Repository class SetRepository extends Repository
{ {
/** /**
* Create search query from SetSearch entity
*
* @param SetSearch $setSearch * @param SetSearch $setSearch
* *
* @return Query * @return Query
@ -23,7 +29,7 @@ class SetRepository extends Repository
if ($searchQuery = $setSearch->getQuery()) { if ($searchQuery = $setSearch->getQuery()) {
$query = new Query\MultiMatch(); $query = new Query\MultiMatch();
$query->setFields(['name', 'id']); $query->setFields(['name', 'id', 'id.ngrams']);
$query->setQuery($searchQuery); $query->setQuery($searchQuery);
$query->setFuzziness(0.7); $query->setFuzziness(0.7);
$query->setMinimumShouldMatch('80%'); $query->setMinimumShouldMatch('80%');
@ -62,6 +68,11 @@ class SetRepository extends Repository
return new Query($boolQuery); return new Query($boolQuery);
} }
/**
* @param SetSearch $setSearch
* @param int $limit
* @return array
*/
public function search(SetSearch $setSearch, $limit = 500) public function search(SetSearch $setSearch, $limit = 500)
{ {
$query = $this->getSearchQuery($setSearch); $query = $this->getSearchQuery($setSearch);
@ -69,6 +80,14 @@ class SetRepository extends Repository
return $this->find($query, $limit); 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) public function findHighlighted($query, $limit = 500)
{ {
$setSearch = new SetSearch(); $setSearch = new SetSearch();