summaryrefslogtreecommitdiff
path: root/vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php')
-rw-r--r--vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php304
1 files changed, 304 insertions, 0 deletions
diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php
new file mode 100644
index 00000000..796bfb8d
--- /dev/null
+++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php
@@ -0,0 +1,304 @@
+<?php
+
+namespace Elastica\Test\Type;
+
+use Elastica\Document;
+use Elastica\Query;
+use Elastica\Query\QueryString;
+use Elastica\Test\Base as BaseTest;
+use Elastica\Type;
+use Elastica\Type\Mapping;
+
+class MappingTest extends BaseTest
+{
+ public function testMappingStoreFields()
+ {
+ $client = $this->_getClient();
+ $index = $client->getIndex('test');
+
+ $index->create(array(), true);
+ $type = $index->getType('test');
+
+ $mapping = new Mapping($type,
+ array(
+ 'firstname' => array('type' => 'string', 'store' => 'yes'),
+ // default is store => no expected
+ 'lastname' => array('type' => 'string'),
+ )
+ );
+ $mapping->disableSource();
+
+ $type->setMapping($mapping);
+
+ $firstname = 'Nicolas';
+ $doc = new Document(1,
+ array(
+ 'firstname' => $firstname,
+ 'lastname' => 'Ruflin'
+ )
+ );
+
+ $type->addDocument($doc);
+
+ $index->refresh();
+ $queryString = new QueryString('ruflin');
+ $query = Query::create($queryString);
+ $query->setFields(array('*'));
+
+ $resultSet = $type->search($query);
+ $result = $resultSet->current();
+ $fields = $result->getFields();
+
+ $this->assertEquals($firstname, $fields['firstname'][0]);
+ $this->assertArrayNotHasKey('lastname', $fields);
+ $this->assertEquals(1, count($fields));
+
+ $index->flush();
+ $document = $type->getDocument(1);
+
+ $this->assertEmpty($document->getData());
+
+ $index->delete();
+ }
+
+ public function testEnableAllField()
+ {
+ $index = $this->_createIndex();
+ $type = $index->getType('test');
+
+ $mapping = new Mapping($type, array());
+
+ $mapping->enableAllField();
+
+ $data = $mapping->toArray();
+ $this->assertTrue($data[$type->getName()]['_all']['enabled']);
+
+ $response = $mapping->send();
+ $this->assertTrue($response->isOk());
+
+ $index->delete();
+ }
+
+ public function testEnableTtl()
+ {
+ $client = $this->_getClient();
+ $index = $client->getIndex('test');
+
+ $index->create(array(), true);
+ $type = $index->getType('test');
+
+ $mapping = new Mapping($type, array());
+
+ $mapping->enableTtl();
+
+ $data = $mapping->toArray();
+ $this->assertTrue($data[$type->getName()]['_ttl']['enabled']);
+
+ $index->delete();
+ }
+
+ public function testNestedMapping()
+ {
+ $client = $this->_getClient();
+ $index = $client->getIndex('test');
+
+ $index->create(array(), true);
+ $type = $index->getType('test');
+
+ $this->markTestIncomplete('nested mapping is not set right yet');
+ $mapping = new Mapping($type,
+ array(
+ 'test' => array(
+ 'type' => 'object', 'store' => 'yes', 'properties' => array(
+ 'user' => array(
+ 'properties' => array(
+ 'firstname' => array('type' => 'string', 'store' => 'yes'),
+ 'lastname' => array('type' => 'string', 'store' => 'yes'),
+ 'age' => array('type' => 'integer', 'store' => 'yes'),
+ )
+ ),
+ ),
+ ),
+ )
+ );
+
+ $type->setMapping($mapping);
+
+ $doc = new Document(1, array(
+ 'user' => array(
+ 'firstname' => 'Nicolas',
+ 'lastname' => 'Ruflin',
+ 'age' => 9
+ ),
+ ));
+
+ $type->addDocument($doc);
+
+ $index->refresh();
+ $resultSet = $type->search('ruflin');
+
+ $index->delete();
+ }
+
+ public function testParentMapping()
+ {
+ $index = $this->_createIndex();
+ $parenttype = new Type($index, 'parenttype');
+ $parentmapping = new Mapping($parenttype,
+ array(
+ 'name' => array('type' => 'string', 'store' => 'yes')
+ )
+ );
+
+ $parenttype->setMapping($parentmapping);
+
+ $childtype = new Type($index, 'childtype');
+ $childmapping = new Mapping($childtype,
+ array(
+ 'name' => array('type' => 'string', 'store' => 'yes'),
+ )
+ );
+ $childmapping->setParent('parenttype');
+
+ $childtype->setMapping($childmapping);
+
+ $data = $childmapping->toArray();
+ $this->assertEquals('parenttype', $data[$childtype->getName()]['_parent']['type']);
+
+ $index->delete();
+ }
+
+ public function testMappingExample()
+ {
+ $index = $this->_createIndex();
+ $type = $index->getType('notes');
+
+ $mapping = new Mapping($type,
+ array(
+ 'note' => array(
+ 'store' => 'yes', 'properties' => array(
+ 'titulo' => array('type' => 'string', 'store' => 'no', 'include_in_all' => true, 'boost' => 1.0),
+ 'contenido' => array('type' => 'string', 'store' => 'no', 'include_in_all' => true, 'boost' => 1.0)
+ )
+ )
+ )
+ );
+
+ $type->setMapping($mapping);
+
+ $doc = new Document(1, array(
+ 'note' => array(
+ array(
+ 'titulo' => 'nota1',
+ 'contenido' => 'contenido1'
+ ),
+ array(
+ 'titulo' => 'nota2',
+ 'contenido' => 'contenido2'
+ )
+ )
+ )
+ );
+
+ $type->addDocument($doc);
+
+ $index->delete();
+ }
+
+ /**
+ * Test setting a dynamic template and validate whether the right mapping is applied after adding a document which
+ * should match the dynamic template. The example is the template_1 from the Elasticsearch documentation.
+ *
+ * @link http://www.elasticsearch.org/guide/reference/mapping/root-object-type/
+ */
+ public function testDynamicTemplate()
+ {
+ $index = $this->_createIndex();
+ $type = $index->getType('person');
+
+ // set a dynamic template "template_1" which creates a multi field for multi* matches.
+ $mapping = new Mapping($type);
+ $mapping->setParam('dynamic_templates', array(
+ array('template_1' => array(
+ 'match' => 'multi*',
+ 'mapping' => array(
+ 'type' => 'multi_field',
+ 'fields' => array(
+ '{name}' => array('type' => '{dynamic_type}', 'index' => 'analyzed'),
+ 'org' => array('type' => '{dynamic_type}', 'index' => 'not_analyzed')
+ )
+ )
+ ))
+ ));
+
+ $mapping->send();
+
+ // when running the tests, the mapping sometimes isn't available yet. Optimize index to enforce reload mapping.
+ $index->optimize();
+
+ // create a document which should create a mapping for the field: multiname.
+ $testDoc = new Document('person1', array('multiname' => 'Jasper van Wanrooy'), $type);
+ $index->addDocuments(array($testDoc));
+ sleep(1); //sleep 1 to ensure that the test passes every time
+
+ // read the mapping from Elasticsearch and assert that the multiname.org field is "not_analyzed"
+ $newMapping = $type->getMapping();
+ $this->assertArrayHasKey('person', $newMapping,
+ 'Person type not available in mapping from ES. Mapping set at all?');
+ $this->assertArrayHasKey('properties', $newMapping['person'],
+ 'Person type doesnt have any properties. Document properly added?');
+ $this->assertArrayHasKey('multiname', $newMapping['person']['properties'],
+ 'The multiname property is not added to the mapping. Document properly added?');
+ $this->assertArrayHasKey('fields', $newMapping['person']['properties']['multiname'],
+ 'The multiname field of the Person type is presumably not a multi_field type. Dynamic mapping not applied?');
+ $this->assertArrayHasKey('org', $newMapping['person']['properties']['multiname']['fields'],
+ 'The multi* matcher did not create a mapping for the multiname.org property when indexing the document.');
+ $this->assertArrayHasKey('index', $newMapping['person']['properties']['multiname']['fields']['org'],
+ 'Indexing status of the multiname.org not available. Dynamic mapping not fully applied!');
+ $this->assertEquals('not_analyzed', $newMapping['person']['properties']['multiname']['fields']['org']['index']);
+
+ $index->delete();
+ }
+
+ public function testSetMeta()
+ {
+ $index = $this->_createIndex();
+ $type = $index->getType('test');
+ $mapping = new Mapping($type, array(
+ 'firstname' => array('type' => 'string', 'store' => 'yes'),
+ 'lastname' => array('type' => 'string')
+ ));
+ $mapping->setMeta(array('class' => 'test'));
+ $type->setMapping($mapping);
+
+ $mappingData = $type->getMapping();
+ $this->assertEquals('test', $mappingData['test']['_meta']['class']);
+
+ $index->delete();
+ }
+
+ public function testGetters()
+ {
+ $index = $this->_createIndex();
+ $type = $index->getType('test');
+ $properties = array(
+ 'firstname' => array('type' => 'string', 'store' => 'yes'),
+ 'lastname' => array('type' => 'string')
+ );
+ $mapping = new Mapping($type, $properties);
+ $all = array(
+ "enabled" => true,
+ "store" => "yes"
+ );
+ $mapping->setParam('_all', $all);
+ $get_all = $mapping->getParam('_all');
+
+ $this->assertEquals($get_all, $all);
+
+ $this->assertNull($mapping->getParam('_boost', $all));
+
+ $this->assertEquals($properties, $mapping->getProperties());
+
+ $index->delete();
+ }
+}