151 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * @file
 | 
						|
 * Hooks provided by the Search API Solr search module.
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * @addtogroup hooks
 | 
						|
 * @{
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Lets modules alter a Solr search request before sending it.
 | 
						|
 *
 | 
						|
 * Apache_Solr_Service::search() is called afterwards with these parameters.
 | 
						|
 * Please see this method for details on what should be altered where and what
 | 
						|
 * is set afterwards.
 | 
						|
 *
 | 
						|
 * @param array $call_args
 | 
						|
 *   An associative array containing all three arguments to the
 | 
						|
 *   SearchApiSolrConnectionInterface::search() call ("query", "params" and
 | 
						|
 *   "method") as references.
 | 
						|
 * @param SearchApiQueryInterface $query
 | 
						|
 *   The SearchApiQueryInterface object representing the executed search query.
 | 
						|
 */
 | 
						|
function hook_search_api_solr_query_alter(array &$call_args, SearchApiQueryInterface $query) {
 | 
						|
  if ($query->getOption('foobar')) {
 | 
						|
    $call_args['params']['foo'] = 'bar';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Change the way the index's field names are mapped to Solr field names.
 | 
						|
 *
 | 
						|
 * @param SearchApiIndex $index
 | 
						|
 *   The index whose field mappings are altered.
 | 
						|
 * @param array $fields
 | 
						|
 *   An associative array containing the index field names mapped to their Solr
 | 
						|
 *   counterparts. The special fields 'search_api_id' and 'search_api_relevance'
 | 
						|
 *   are also included.
 | 
						|
 */
 | 
						|
function hook_search_api_solr_field_mapping_alter(SearchApiIndex $index, array &$fields) {
 | 
						|
  if ($index->entity_type == 'node' && isset($fields['body:value'])) {
 | 
						|
    $fields['body:value'] = 'text';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Alter Solr documents before they are sent to Solr for indexing.
 | 
						|
 *
 | 
						|
 * @param array $documents
 | 
						|
 *   An array of SearchApiSolrDocument objects ready to be indexed, generated
 | 
						|
 *   from $items array.
 | 
						|
 * @param SearchApiIndex $index
 | 
						|
 *   The search index for which items are being indexed.
 | 
						|
 * @param array $items
 | 
						|
 *   An array of items being indexed.
 | 
						|
 */
 | 
						|
function hook_search_api_solr_documents_alter(array &$documents, SearchApiIndex $index, array $items) {
 | 
						|
  // Adds a "foo" field with value "bar" to all documents.
 | 
						|
  foreach ($documents as $document) {
 | 
						|
    $document->setField('foo', 'bar');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Lets modules alter the search results returned from a Solr search.
 | 
						|
 *
 | 
						|
 * @param array $results
 | 
						|
 *   The results array that will be returned for the search.
 | 
						|
 * @param SearchApiQueryInterface $query
 | 
						|
 *   The SearchApiQueryInterface object representing the executed search query.
 | 
						|
 * @param object $response
 | 
						|
 *   The Solr response object.
 | 
						|
 */
 | 
						|
function hook_search_api_solr_search_results_alter(array &$results, SearchApiQueryInterface $query, $response) {
 | 
						|
  if (isset($response->facet_counts->facet_fields->custom_field)) {
 | 
						|
    // Do something with $results.
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Lets modules alter a Solr search request for a multi-index search.
 | 
						|
 *
 | 
						|
 * SearchApiSolrConnectionInterface::search() is called afterwards with these
 | 
						|
 * parameters. Please see this method for details on what should be altered
 | 
						|
 * where and what is set afterwards.
 | 
						|
 *
 | 
						|
 * @param array $call_args
 | 
						|
 *   An associative array containing all three arguments to the
 | 
						|
 *   SearchApiSolrConnectionInterface::search() call ("query", "params" and
 | 
						|
 *   "method") as references.
 | 
						|
 * @param SearchApiMultiQueryInterface $query
 | 
						|
 *   The object representing the executed search query.
 | 
						|
 */
 | 
						|
function hook_search_api_solr_multi_query_alter(array &$call_args, SearchApiMultiQueryInterface $query) {
 | 
						|
  if ($query->getOption('foobar')) {
 | 
						|
    $call_args['params']['foo'] = 'bar';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Provide Solr dynamic fields as Search API data types.
 | 
						|
 *
 | 
						|
 * This serves as a placeholder for documenting additional keys for
 | 
						|
 * hook_search_api_data_type_info() which are recognized by this module to
 | 
						|
 * automatically support dynamic field types from the schema.
 | 
						|
 *
 | 
						|
 * @return array
 | 
						|
 *   In addition to the keys for the individual types that are defined by
 | 
						|
 *   hook_search_api_data_type_info(), the following keys are regonized:
 | 
						|
 *   - prefix: The Solr field name prefix to use for this type. Should match
 | 
						|
 *     two existing dynamic fields definitions with names "{PREFIX}s_*" and
 | 
						|
 *     "{PREFIX}m_*".
 | 
						|
 *   - always multiValued: (optional) If TRUE, only the dynamic field name
 | 
						|
 *     prefix (without the "_*" portion) with multiValued="true" should be given
 | 
						|
 *     by "prefix", instead of the common prefix part for both the single-valued
 | 
						|
 *     and the multi-valued field. This should be the case for all fulltext
 | 
						|
 *     fields, since they might already be tokenized by the Search API. Defaults
 | 
						|
 *     to FALSE.
 | 
						|
 *
 | 
						|
 *@see hook_search_api_data_type_info()
 | 
						|
 */
 | 
						|
function search_api_solr_hook_search_api_data_type_info() {
 | 
						|
  return array(
 | 
						|
    // You can use any identifier you want here, but it makes sense to use the
 | 
						|
    // field type name from schema.xml.
 | 
						|
    'edge_n2_kw_text' => array(
 | 
						|
      // Stock hook_search_api_data_type_info() info:
 | 
						|
      'name' => t('Fulltext (w/ partial matching)'),
 | 
						|
      'fallback' => 'text',
 | 
						|
      // Dynamic field with name="te_*".
 | 
						|
      'prefix' => 'te',
 | 
						|
      // Fulltext types should always be multi-valued.
 | 
						|
      'always multiValued' => TRUE,
 | 
						|
    ),
 | 
						|
    'tlong' => array(
 | 
						|
      // Stock hook_search_api_data_type_info() info:
 | 
						|
      'name' => t('TrieLong'),
 | 
						|
      'fallback' => 'integer',
 | 
						|
      // Dynamic fields with name="its_*" and name="itm_*".
 | 
						|
      'prefix' => 'it',
 | 
						|
    ),
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @} End of "addtogroup hooks".
 | 
						|
 */
 |