You are here

public function HtmlFilterTest::testBoostTerms in Search API Solr 4.x

Same name and namespace in other branches
  1. 8.3 tests/src/Kernel/Processor/HtmlFilterTest.php \Drupal\Tests\search_api_solr\Kernel\Processor\HtmlFilterTest::testBoostTerms()

Tests term boosts.

File

tests/src/Kernel/Processor/HtmlFilterTest.php, line 59

Class

HtmlFilterTest
Tests usages of Solr payloads.

Namespace

Drupal\Tests\search_api_solr\Kernel\Processor

Code

public function testBoostTerms() {
  $solr_major_version = $this->server
    ->getBackend()
    ->getSolrConnector()
    ->getSolrMajorVersion();
  if (version_compare($solr_major_version, '6', '<')) {
    $this
      ->markTestSkipped('Term boosting requires Solr >= 6.');
    return;
  }
  $this
    ->assertArrayHasKey('html_filter', $this->index
    ->getProcessors(), 'HTML filter processor is added.');
  $this
    ->createNode([
    'type' => 'page',
    'title' => 'Beautiful Page 1',
  ]);
  $this
    ->createNode([
    'type' => 'page',
    'title' => 'Beautiful <b>Page</b> 2',
  ]);
  $this
    ->createNode([
    'type' => 'page',
    'title' => 'Beautiful Page 3',
  ]);
  $this->index
    ->reindex();
  $this
    ->indexItems();
  $query = new Query($this->index);
  $query
    ->sort('search_api_relevance', QueryInterface::SORT_DESC);
  $query
    ->sort('search_api_id');
  $query
    ->getParseMode()
    ->setConjunction('OR');
  $result = $query
    ->execute();
  $this
    ->assertEquals([
    'entity:node/1:en',
    'entity:node/2:en',
    'entity:node/3:en',
  ], array_keys($result
    ->getResultItems()));
  $query = new Query($this->index);
  $query
    ->keys([
    'beautiful',
  ]);
  $query
    ->sort('search_api_relevance', QueryInterface::SORT_DESC);
  $query
    ->sort('search_api_id');
  $query
    ->getParseMode()
    ->setConjunction('OR');
  $result = $query
    ->execute();
  $this
    ->assertEquals([
    'entity:node/1:en',
    'entity:node/2:en',
    'entity:node/3:en',
  ], array_keys($result
    ->getResultItems()));

  // Rerank query based on payloads for HTML tags boosts on match.
  $query = new Query($this->index);
  $query
    ->keys([
    'page',
  ]);
  $query
    ->sort('search_api_relevance', QueryInterface::SORT_DESC);
  $query
    ->sort('search_api_id');
  $query
    ->getParseMode()
    ->setConjunction('OR');
  $result = $query
    ->execute();
  $this
    ->assertEquals([
    'entity:node/2:en',
    'entity:node/1:en',
    'entity:node/3:en',
  ], array_keys($result
    ->getResultItems()));
  $this
    ->createNode([
    'type' => 'page',
    'title' => "d'avion",
  ]);
  $this
    ->createNode([
    'type' => 'page',
    'title' => "<b>d'avion<b>",
  ]);
  $this
    ->createNode([
    'type' => 'page',
    'title' => '๐Ÿ˜€๐Ÿ˜Ž๐Ÿ‘พ',
  ]);
  $this
    ->createNode([
    'type' => 'page',
    'title' => '<b>More| strange " characters ๐Ÿ˜€๐Ÿ˜Ž๐Ÿ‘พ<b>',
  ]);
  $this
    ->createNode([
    'type' => 'page',
    'title' => 'More| strange " characters ๐Ÿ˜€๐Ÿ˜Ž๐Ÿ‘พ',
  ]);
  $this
    ->indexItems();
  $query = new Query($this->index);
  $query
    ->keys([
    "d'avion",
  ]);
  $query
    ->sort('search_api_relevance', QueryInterface::SORT_DESC);
  $query
    ->sort('search_api_id');
  $query
    ->getParseMode()
    ->setConjunction('OR');
  $result = $query
    ->execute();
  $this
    ->assertEquals([
    'entity:node/5:en',
    'entity:node/4:en',
  ], array_keys($result
    ->getResultItems()));
  $query = new Query($this->index);
  $query
    ->keys([
    '๐Ÿ˜€๐Ÿ˜Ž๐Ÿ‘พ',
  ]);
  $query
    ->sort('search_api_relevance', QueryInterface::SORT_DESC);
  $query
    ->sort('search_api_id');
  $query
    ->getParseMode()
    ->setConjunction('OR');
  $result = $query
    ->execute();
  $this
    ->assertEquals([
    'entity:node/7:en',
    'entity:node/6:en',
    'entity:node/8:en',
  ], array_keys($result
    ->getResultItems()));
  $this
    ->createNode([
    'type' => 'page',
    'title' => "<b>VeryLongStingsWithMoreThanOneHoundredCharactersShouldNotNeitherBeIndexedAsTextNorAsBoostedTokenAndShouldNotLeadToExceptionsDuringIndexing<b>",
  ]);
  $this
    ->indexItems();
  $query = new Query($this->index);
  $query
    ->keys([
    'VeryLongStingsWithMoreThanOneHoundredCharactersShouldNotNeitherBeIndexedAsTextNorAsBoostedTokenAndShouldNotLeadToExceptionsDuringIndexing',
  ]);
  $query
    ->sort('search_api_relevance', QueryInterface::SORT_DESC);
  $query
    ->sort('search_api_id');
  $query
    ->getParseMode()
    ->setConjunction('OR');
  $result = $query
    ->execute();
  $this
    ->assertEquals([], array_keys($result
    ->getResultItems()));
  $this
    ->createNode([
    'type' => 'page',
    'title' => "<b>VeryLongStingsWithMoreThanOneHoundredCharactersShouldNotNeitherBeIndexedAsTextNorAsBoostedTokenAndShouldNotLeadToExceptionsDuringIndexing<b>",
  ]);
  $this
    ->indexItems();
  $query = new Query($this->index);
  $query
    ->keys([
    'VeryLongStingsWithMoreThanOneHoundredCharactersShouldNotNeitherBeIndexedAsTextNorAsBoostedTokenAndShouldNotLeadToExceptionsDuringIndexing',
  ]);
  $query
    ->sort('search_api_relevance', QueryInterface::SORT_DESC);
  $query
    ->sort('search_api_id');
  $query
    ->getParseMode()
    ->setConjunction('OR');
  $result = $query
    ->execute();
  $this
    ->assertEquals([], array_keys($result
    ->getResultItems()));
}