Beispiel #1
0
 public function testNoEscapeAddField()
 {
     $this->doc->setFilterControlCharacters(false);
     $this->doc->setField('foo', $value1 = 'bar' . chr(15));
     $this->doc->addField('foo', $value2 = 'bar' . chr(15) . chr(8));
     $this->assertEquals(array($value1, $value2), $this->doc->foo);
 }
 public function testSetAndGetFieldsUsingModifiersWithoutKey()
 {
     $this->doc->clear();
     $this->doc->setField('id', 1);
     $this->doc->setField('name', 'newname', null, Document::MODIFIER_SET);
     $this->setExpectedException('Solarium\\Exception\\RuntimeException');
     $this->doc->getFields();
 }
 /**
  * @test
  */
 public function adapterPrepareUpdateReturnsSolariumDocument()
 {
     $object = new SolariumUpdateDocument();
     $object->setField('id', 5);
     $object->setField('type', $this->type);
     /* @var $preparedObject SolariumUpdateDocument */
     $preparedObject = $this->adapter->prepareUpdate($object);
     $this->assertInstanceOf(SolariumUpdateDocument::class, $preparedObject);
     $this->assertEquals(5, $preparedObject->offsetGet('id'));
     $this->assertEquals($this->type, $preparedObject->offsetGet('type'));
 }
 public function testBuildAddXmlWithFieldModifiersAndMultivalueFields()
 {
     $doc = new Document();
     $doc->setKey('id', 1);
     $doc->addField('category', 123, null, Document::MODIFIER_ADD);
     $doc->addField('category', 234, null, Document::MODIFIER_ADD);
     $doc->addField('name', 'test', 2.3, Document::MODIFIER_SET);
     $doc->setField('stock', 2, null, Document::MODIFIER_INC);
     $command = new AddCommand();
     $command->addDocument($doc);
     $this->assertEquals('<add>' . '<doc>' . '<field name="id">1</field>' . '<field name="category" update="add">123</field>' . '<field name="category" update="add">234</field>' . '<field name="name" boost="2.3" update="set">test</field>' . '<field name="stock" update="inc">2</field>' . '</doc>' . '</add>', $this->builder->buildAddXml($command));
 }
 /**
  * Helper method for indexing.
  *
  * Adds $value with field name $key to the document $doc. The format of $value
  * is the same as specified in
  * \Drupal\search_api\Backend\BackendSpecificInterface::indexItems().
  */
 protected function addIndexField(Document $doc, $key, $key_single, $values, $type)
 {
     // Don't index empty values (i.e., when field is missing).
     if (!isset($values)) {
         return;
     }
     // All fields.
     foreach ($values as $value) {
         switch ($type) {
             case 'boolean':
                 $value = $value ? 'true' : 'false';
                 break;
             case 'date':
                 $value = is_numeric($value) ? (int) $value : strtotime($value);
                 if ($value === FALSE) {
                     return;
                 }
                 $value = format_date($value, 'custom', self::SOLR_DATE_FORMAT, 'UTC');
                 break;
             case 'integer':
                 $value = (int) $value;
                 break;
             case 'decimal':
                 $value = (double) $value;
                 break;
         }
         // For tokenized text, add each word separately.
         if ($type == 'tokenized_text' && is_array($value)) {
             foreach ($value as $tokenizd_value) {
                 // @todo Score is tracked by key, not for each value, how to handle
                 //   this?
                 $doc->addField($key, $tokenizd_value['value'], $tokenizd_value['score']);
             }
         } else {
             $doc->addField($key, $value);
         }
     }
     $field_value = $doc->{$key};
     $first_value = is_array($field_value) ? reset($field_value) : $field_value;
     if ($type == 'tokenized_text' && is_array($first_value) && isset($first_value['value'])) {
         $first_value = $first_value['value'];
     }
     $doc->setField($key_single, $first_value);
 }