diff --git a/src/Bundle/PuceneBundle/DependencyInjection/Configuration.php b/src/Bundle/PuceneBundle/DependencyInjection/Configuration.php index 5b18d1d..b7f84ee 100644 --- a/src/Bundle/PuceneBundle/DependencyInjection/Configuration.php +++ b/src/Bundle/PuceneBundle/DependencyInjection/Configuration.php @@ -84,12 +84,8 @@ private function getIndexNode() ->arrayNode('properties') ->useAttributeAsKey('name') ->prototype('array') - ->children() - ->enumNode('type') - ->values(Types::getTypes()) - ->defaultValue('text') - ->end() - ->scalarNode('analyzer')->defaultValue('standard')->end() + ->children(); + $node = $this->getFieldMappingNode($node) ->end() ->end() ->end() @@ -102,4 +98,78 @@ private function getIndexNode() return $node; } + + private function getFieldMappingNode($node, $fields = true) + { + $node + ->enumNode('type') + ->values(Types::getTypes()) + ->defaultValue('text') + ->end() + ->scalarNode('analyzer')->end() + ->booleanNode('index')->end() + ->floatNode('boost')->end(); + + if ($fields) { + $node = $node + ->arrayNode('fields') + ->useAttributeAsKey('name') + ->prototype('array') + ->children(); + $node = $this->getFieldMappingNode($node, false) + ->end() + ->end() + ->end(); + } + + $node = $node + ->booleanNode('eager_global_ordinals')->end() + ->booleanNode('fielddata')->end() + ->arrayNode('fielddata_frequency_filter') + ->children() + ->floatNode('min')->end() + ->floatNode('max')->end() + ->integerNode('min_segment_size')->end() + ->end() + ->end() + ->booleanNode('include_in_all')->end() + ->enumNode('index_options') + ->values([ + 'docs', + 'freqs', + 'positions', + 'offsets', + ]) + ->end() + ->booleanNode('norms')->end() + ->integerNode('position_increment_gap')->end() + ->booleanNode('store')->end() + ->scalarNode('search_analyzer')->end() + ->scalarNode('search_quote_analyzer')->end() + ->enumNode('similarity') + ->values([ + 'BM25', + 'classic', + 'boolean', + ]) + ->end() + ->enumNode('term_vector') + ->values([ + 'no', + 'yes', + 'with_positions', + 'with_offsets', + 'with_positions_offsets', + ]) + ->end() + ->booleanNode('doc_values')->end() + ->integerNode('ignore_above')->end() + ->scalarNode('null_value')->end() + ->scalarNode('normalizer')->end() + ->booleanNode('coerce')->end() + ->booleanNode('ignore_malformed')->end() + ->scalarNode('format')->end(); + + return $node; + } } diff --git a/src/Component/Pucene/Dbal/PuceneSchema.php b/src/Component/Pucene/Dbal/PuceneSchema.php index 7b6c947..b7f2724 100644 --- a/src/Component/Pucene/Dbal/PuceneSchema.php +++ b/src/Component/Pucene/Dbal/PuceneSchema.php @@ -30,6 +30,7 @@ public function __construct($prefix) $this->createDocumentsTable(); $this->createTokensTable(); + $this->createMappingsTable(); $this->createDocumentTermsTable(); $this->createDocumentFieldsTables(); } @@ -96,6 +97,20 @@ private function createDocumentTermsTable() $fields->addIndex(['term']); } + private function createMappingsTable() + { + $this->tableNames['mappings'] = sprintf('pu_%s_mappings', $this->prefix); + + $fields = $this->schema->createTable($this->tableNames['mappings']); + $fields->addColumn('id', 'integer', ['autoincrement' => true]); + $fields->addColumn('name', 'string', ['length' => 255]); + $fields->addColumn('field_name', 'string', ['length' => 255]); + $fields->addColumn('options', 'json_array'); + + $fields->setPrimaryKey(['id']); + $fields->addIndex(['type', 'field_name']); + } + /** * Create table per mapping type. *