The DisMax component can be used if you want to search using the DisMaxRequestHandler. This also affects the handling of the query string of the select query object (the 'main' query).

Options

Name Type Default value Description
queryalternative string null If specified, this query will be used (and parsed by default using standard query parsing syntax) when the main query string is not specified or blank.
queryfields string null List of fields and the "boosts" to associate with each of them when building DisjunctionMaxQueries from the user's query. The format supported is "fieldOne^2.3 fieldTwo fieldThree^0.4"
mimimummatch string null This option makes it possible to say that a certain minimum number of clauses must match. See Solr manual for details.
phrasefields string null This param can be used to "boost" the score of documents in cases where all of the terms in the "q" param appear in close proximity. Format is: "fieldA^1.0 fieldB^2.2"
phraseslop string null Amount of slop on phrase queries built for "pf" fields (affects boosting)
queryphraseslop string null Amount of slop on phrase queries explicitly included in the user's query string (in qf fields; affects matching)
tie float null Float value to use as tiebreaker in DisjunctionMaxQueries
boostquery string null A raw query string (in the SolrQuerySyntax) that will be included with the user's query to influence the score.
boostfunctions string null Functions (with optional boosts) that will be included in the user's query to influence the score. Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"

Selecting all documents

The normal Solr syntax *:* doesn't work for Dismax. To select all documents you need to do two things:

  • make sure the 'query' value of the select query is set to an empty string. The default query value in a Solarium select query is *:* so you need manually set it to an empty string!
  • set the dismax query alternative to *:*. While the DisMax 'main' query doesn't support the normal query syntax, the query alternative does.

Example

<?php

require_once(__DIR__.'/init.php');
htmlHeader();

// create a client instance
$client = new Solarium\Client($adapter, $eventDispatcher, $config);

// get a select query instance
$query = $client->createSelect();

// get the dismax component and set a boost query
$dismax = $query->getDisMax();
$dismax->setBoostQuery('cat:"graphics card"^2');

// this query is now a dismax query
$query->setQuery('memory -printer');

// this executes the query and returns the result
$resultset = $client->select($query);

// display the total number of documents found by Solr
echo 'NumFound: '.$resultset->getNumFound();

// show documents using the resultset iterator
foreach ($resultset as $document) {

    echo '<hr/><table>';

    // the documents are also iterable, to get all fields
    foreach ($document as $field => $value) {
        // this converts multivalue fields to a comma-separated string
        if (is_array($value)) {
            $value = implode(', ', $value);
        }

        echo '<tr><th>' . $field . '</th><td>' . $value . '</td></tr>';
    }

    echo '</table>';
}

htmlFooter();

Edismax

For eDismax you should use the separate eDisMax component.