annotate sites/all/modules/custom/solrconnect/apachesolr.api.php @ 0:015d06b10d37 default tip

initial
author dwinter
date Wed, 31 Jul 2013 13:49:13 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
015d06b10d37 initial
dwinter
parents:
diff changeset
1 <?php
015d06b10d37 initial
dwinter
parents:
diff changeset
2 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
3 * @file
015d06b10d37 initial
dwinter
parents:
diff changeset
4 * Exposed Hooks in 7.x:
015d06b10d37 initial
dwinter
parents:
diff changeset
5 */
015d06b10d37 initial
dwinter
parents:
diff changeset
6
015d06b10d37 initial
dwinter
parents:
diff changeset
7 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
8 * Lets modules know when the default environment is changed.
015d06b10d37 initial
dwinter
parents:
diff changeset
9 *
015d06b10d37 initial
dwinter
parents:
diff changeset
10 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
11 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
12 * @param string $old_env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
13 * The old machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
14 */
015d06b10d37 initial
dwinter
parents:
diff changeset
15 function hook_apachesolr_default_environment($env_id, $old_env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
16 $page = apachesolr_search_page_load('core_search');
015d06b10d37 initial
dwinter
parents:
diff changeset
17 if ($page && $page['env_id'] != $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
18 $page['env_id'] = $env_id;
015d06b10d37 initial
dwinter
parents:
diff changeset
19 apachesolr_search_page_save($page);
015d06b10d37 initial
dwinter
parents:
diff changeset
20 }
015d06b10d37 initial
dwinter
parents:
diff changeset
21 }
015d06b10d37 initial
dwinter
parents:
diff changeset
22
015d06b10d37 initial
dwinter
parents:
diff changeset
23 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
24 * Add index mappings for Field API types. The default mappings array
015d06b10d37 initial
dwinter
parents:
diff changeset
25 * handles just list fields and taxonomy term reference fields, such as:
015d06b10d37 initial
dwinter
parents:
diff changeset
26 *
015d06b10d37 initial
dwinter
parents:
diff changeset
27 * $mappings['list_text'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
28 * 'indexing_callback' => 'apachesolr_fields_list_indexing_callback',
015d06b10d37 initial
dwinter
parents:
diff changeset
29 * 'index_type' => 'string',
015d06b10d37 initial
dwinter
parents:
diff changeset
30 * 'map callback' => 'apachesolr_fields_list_display_callback',
015d06b10d37 initial
dwinter
parents:
diff changeset
31 * 'facets' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
32 * ),
015d06b10d37 initial
dwinter
parents:
diff changeset
33 *
015d06b10d37 initial
dwinter
parents:
diff changeset
34 * In your implementation you can add additional field types such as:
015d06b10d37 initial
dwinter
parents:
diff changeset
35 * $mappings['number_integer']['number'] = array(...);
015d06b10d37 initial
dwinter
parents:
diff changeset
36 *
015d06b10d37 initial
dwinter
parents:
diff changeset
37 * You can also add mapping for a specific field. This will take precedence
015d06b10d37 initial
dwinter
parents:
diff changeset
38 * over any mapping for a general field type. A field-specific mapping would
015d06b10d37 initial
dwinter
parents:
diff changeset
39 * looks like:
015d06b10d37 initial
dwinter
parents:
diff changeset
40 * $mappings['per-field']['field_model_name'] = array(...);
015d06b10d37 initial
dwinter
parents:
diff changeset
41 *
015d06b10d37 initial
dwinter
parents:
diff changeset
42 * Much more information can be found below in the example implementation or in
015d06b10d37 initial
dwinter
parents:
diff changeset
43 * facetapi.api.php. If you feel restricted with the options as set below
015d06b10d37 initial
dwinter
parents:
diff changeset
44 * there is nothing that stops you from implementing facetapi directly. However
015d06b10d37 initial
dwinter
parents:
diff changeset
45 * it is recommended to not directly talk to solr fields since this could break
015d06b10d37 initial
dwinter
parents:
diff changeset
46 * in the future.
015d06b10d37 initial
dwinter
parents:
diff changeset
47 *
015d06b10d37 initial
dwinter
parents:
diff changeset
48 * @return array $mappings
015d06b10d37 initial
dwinter
parents:
diff changeset
49 * An associative array of mappings as defined by modules that implement
015d06b10d37 initial
dwinter
parents:
diff changeset
50 * hook_apachesolr_field_mappings().
015d06b10d37 initial
dwinter
parents:
diff changeset
51 */
015d06b10d37 initial
dwinter
parents:
diff changeset
52 function hook_apachesolr_field_mappings() {
015d06b10d37 initial
dwinter
parents:
diff changeset
53 $mappings = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
54 // Example for a field API type. See extensive documentation below
015d06b10d37 initial
dwinter
parents:
diff changeset
55 'number_float' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
56 'indexing_callback' => 'apachesolr_fields_default_indexing_callback',
015d06b10d37 initial
dwinter
parents:
diff changeset
57 'index_type' => 'tfloat',
015d06b10d37 initial
dwinter
parents:
diff changeset
58 'facets' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
59 'query types' => array('term', 'numeric_range'),
015d06b10d37 initial
dwinter
parents:
diff changeset
60 'query type' => 'term',
015d06b10d37 initial
dwinter
parents:
diff changeset
61 'facet mincount allowed' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
62 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
63 // Example for a field API field
015d06b10d37 initial
dwinter
parents:
diff changeset
64 'per-field' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
65 // machine name of the field in Field API
015d06b10d37 initial
dwinter
parents:
diff changeset
66 'field_price' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
67 // REQUIRED FIELDS //
015d06b10d37 initial
dwinter
parents:
diff changeset
68 // Function callback to return the value that will be put in to
015d06b10d37 initial
dwinter
parents:
diff changeset
69 // the solr index
015d06b10d37 initial
dwinter
parents:
diff changeset
70 'indexing_callback' => 'apachesolr_fields_default_indexing_callback',
015d06b10d37 initial
dwinter
parents:
diff changeset
71
015d06b10d37 initial
dwinter
parents:
diff changeset
72 // NON REQUIRED FIELDS //
015d06b10d37 initial
dwinter
parents:
diff changeset
73 // See apachesolr_index_key() for the correct type. Defaults string
015d06b10d37 initial
dwinter
parents:
diff changeset
74 'index_type' => 'string',
015d06b10d37 initial
dwinter
parents:
diff changeset
75 // How to display the values when they return as a facet
015d06b10d37 initial
dwinter
parents:
diff changeset
76 'map callback' => 'apachesolr_fields_list_facet_map_callback',
015d06b10d37 initial
dwinter
parents:
diff changeset
77 // Does your facet have a dynamic name? Add function call here and will
015d06b10d37 initial
dwinter
parents:
diff changeset
78 // have the name of the return value
015d06b10d37 initial
dwinter
parents:
diff changeset
79 'name callback' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
80 // If a custom field needs to be searchable but does not need to be faceted you
015d06b10d37 initial
dwinter
parents:
diff changeset
81 // can change the 'facets' parameter to FALSE.
015d06b10d37 initial
dwinter
parents:
diff changeset
82 'facets' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
83 // Do you want to allow items without value
015d06b10d37 initial
dwinter
parents:
diff changeset
84 'facet missing allowed' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
85 // (optional) Whether or not the facet supports the
015d06b10d37 initial
dwinter
parents:
diff changeset
86 // "minimum facet count" setting. Defaults to TRUE.
015d06b10d37 initial
dwinter
parents:
diff changeset
87 'facet mincount allowed' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
88 // Field API allows any field to be multi-valued.
015d06b10d37 initial
dwinter
parents:
diff changeset
89 // If we set this to false we are able to sort
015d06b10d37 initial
dwinter
parents:
diff changeset
90 'dependency plugins' => array('bundle', 'role'),
015d06b10d37 initial
dwinter
parents:
diff changeset
91 // Does your solr index has a hierarchy?
015d06b10d37 initial
dwinter
parents:
diff changeset
92 // See facetapi_get_taxonomy_hierarchy for details or
015d06b10d37 initial
dwinter
parents:
diff changeset
93 // view the mapping of taxonomy_term_reference
015d06b10d37 initial
dwinter
parents:
diff changeset
94 'hierarchy callback' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
95 // There are different query types to return information from Solr
015d06b10d37 initial
dwinter
parents:
diff changeset
96 // term : Regular strings
015d06b10d37 initial
dwinter
parents:
diff changeset
97 // date : Everything regarding dates
015d06b10d37 initial
dwinter
parents:
diff changeset
98 // numeric_range : Useful when you have widgets that depend
015d06b10d37 initial
dwinter
parents:
diff changeset
99 // on statistics coming from Solr
015d06b10d37 initial
dwinter
parents:
diff changeset
100 'query types' => array('term', 'numeric_range'),
015d06b10d37 initial
dwinter
parents:
diff changeset
101 // Backwards compatible with previous facetapi versions.
015d06b10d37 initial
dwinter
parents:
diff changeset
102 // Pick the main query type
015d06b10d37 initial
dwinter
parents:
diff changeset
103 'query type' => 'term',
015d06b10d37 initial
dwinter
parents:
diff changeset
104 // What dependencies do you have (see facetapi)
015d06b10d37 initial
dwinter
parents:
diff changeset
105 'multiple' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
106 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
107 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
108 );
015d06b10d37 initial
dwinter
parents:
diff changeset
109 return $mappings;
015d06b10d37 initial
dwinter
parents:
diff changeset
110 }
015d06b10d37 initial
dwinter
parents:
diff changeset
111
015d06b10d37 initial
dwinter
parents:
diff changeset
112 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
113 * Alter hook for apachesolr_field_mappings().
015d06b10d37 initial
dwinter
parents:
diff changeset
114 *
015d06b10d37 initial
dwinter
parents:
diff changeset
115 * Add or alter index mappings for Field API types. The default mappings array
015d06b10d37 initial
dwinter
parents:
diff changeset
116 * handles just list fields and taxonomy term reference fields, in the same way
015d06b10d37 initial
dwinter
parents:
diff changeset
117 * as documented in hook_apachesolr_field_mappings.
015d06b10d37 initial
dwinter
parents:
diff changeset
118 *
015d06b10d37 initial
dwinter
parents:
diff changeset
119 * @param array $mappings
015d06b10d37 initial
dwinter
parents:
diff changeset
120 * An associative array of mappings as defined by modules that implement
015d06b10d37 initial
dwinter
parents:
diff changeset
121 * hook_apachesolr_field_mappings().
015d06b10d37 initial
dwinter
parents:
diff changeset
122 * @param string $entity_type
015d06b10d37 initial
dwinter
parents:
diff changeset
123 * The entity type for which you want to alter the field mappings
015d06b10d37 initial
dwinter
parents:
diff changeset
124 */
015d06b10d37 initial
dwinter
parents:
diff changeset
125 function hook_apachesolr_field_mappings_alter(array &$mappings, $entity_type) {
015d06b10d37 initial
dwinter
parents:
diff changeset
126 // Enable indexing for text fields
015d06b10d37 initial
dwinter
parents:
diff changeset
127 $mappings['text'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
128 'indexing_callback' => 'apachesolr_fields_default_indexing_callback',
015d06b10d37 initial
dwinter
parents:
diff changeset
129 'map callback' => '',
015d06b10d37 initial
dwinter
parents:
diff changeset
130 'index_type' => 'string',
015d06b10d37 initial
dwinter
parents:
diff changeset
131 'facets' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
132 'facet missing allowed' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
133 'dependency plugins' => array('bundle', 'role'),
015d06b10d37 initial
dwinter
parents:
diff changeset
134 'hierarchy callback' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
135 'name callback' => '',
015d06b10d37 initial
dwinter
parents:
diff changeset
136 'facet mincount allowed' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
137 'multiple' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
138 );
015d06b10d37 initial
dwinter
parents:
diff changeset
139
015d06b10d37 initial
dwinter
parents:
diff changeset
140 // Add our per field mapping here so we can sort on the
015d06b10d37 initial
dwinter
parents:
diff changeset
141 // price by making it single. Solr cannot sort on multivalued fields
015d06b10d37 initial
dwinter
parents:
diff changeset
142 // field_price is our identifier of a custom field, and it was decided to
015d06b10d37 initial
dwinter
parents:
diff changeset
143 // index in the same way as a number_float field.
015d06b10d37 initial
dwinter
parents:
diff changeset
144 $mappings['per-field']['field_price'] = $mappings['number_float'];
015d06b10d37 initial
dwinter
parents:
diff changeset
145 $mappings['per-field']['field_price']['multiple'] = FALSE;
015d06b10d37 initial
dwinter
parents:
diff changeset
146 }
015d06b10d37 initial
dwinter
parents:
diff changeset
147
015d06b10d37 initial
dwinter
parents:
diff changeset
148 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
149 * Prepare the query by adding parameters, sorts, etc.
015d06b10d37 initial
dwinter
parents:
diff changeset
150 *
015d06b10d37 initial
dwinter
parents:
diff changeset
151 * This hook is invoked before the query is cached. The cached query is used
015d06b10d37 initial
dwinter
parents:
diff changeset
152 * after the search such as for building facet and sort blocks, so parameters
015d06b10d37 initial
dwinter
parents:
diff changeset
153 * added during this hook may be visible to end users.
015d06b10d37 initial
dwinter
parents:
diff changeset
154 *
015d06b10d37 initial
dwinter
parents:
diff changeset
155 * This is otherwise the same as HOOK_apachesolr_query_alter(), but runs before
015d06b10d37 initial
dwinter
parents:
diff changeset
156 * it.
015d06b10d37 initial
dwinter
parents:
diff changeset
157 *
015d06b10d37 initial
dwinter
parents:
diff changeset
158 * @param DrupalSolrQueryInterface $query
015d06b10d37 initial
dwinter
parents:
diff changeset
159 * An object implementing DrupalSolrQueryInterface. No need for &.
015d06b10d37 initial
dwinter
parents:
diff changeset
160 */
015d06b10d37 initial
dwinter
parents:
diff changeset
161 function hook_apachesolr_query_prepare(DrupalSolrQueryInterface $query) {
015d06b10d37 initial
dwinter
parents:
diff changeset
162 // Add a sort on the node ID.
015d06b10d37 initial
dwinter
parents:
diff changeset
163 $query->setAvailableSort('entity_id', array(
015d06b10d37 initial
dwinter
parents:
diff changeset
164 'title' => t('Node ID'),
015d06b10d37 initial
dwinter
parents:
diff changeset
165 'default' => 'asc',
015d06b10d37 initial
dwinter
parents:
diff changeset
166 ));
015d06b10d37 initial
dwinter
parents:
diff changeset
167 }
015d06b10d37 initial
dwinter
parents:
diff changeset
168
015d06b10d37 initial
dwinter
parents:
diff changeset
169 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
170 * Assigns a readable name to your custom solr field
015d06b10d37 initial
dwinter
parents:
diff changeset
171 *
015d06b10d37 initial
dwinter
parents:
diff changeset
172 * @param array $map
015d06b10d37 initial
dwinter
parents:
diff changeset
173 */
015d06b10d37 initial
dwinter
parents:
diff changeset
174 function hook_apachesolr_field_name_map_alter(array &$map) {
015d06b10d37 initial
dwinter
parents:
diff changeset
175 $map['xs_node'] = t('The full node object');
015d06b10d37 initial
dwinter
parents:
diff changeset
176 }
015d06b10d37 initial
dwinter
parents:
diff changeset
177
015d06b10d37 initial
dwinter
parents:
diff changeset
178 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
179 * Alter the query after it's prepared and cached.
015d06b10d37 initial
dwinter
parents:
diff changeset
180 *
015d06b10d37 initial
dwinter
parents:
diff changeset
181 * Any module performing a search should call
015d06b10d37 initial
dwinter
parents:
diff changeset
182 * drupal_alter('apachesolr_query', $query). That function then invokes this
015d06b10d37 initial
dwinter
parents:
diff changeset
183 * hook. It allows modules to modify the query object and its parameters.
015d06b10d37 initial
dwinter
parents:
diff changeset
184 *
015d06b10d37 initial
dwinter
parents:
diff changeset
185 * A module implementing HOOK_apachesolr_query_alter() may set
015d06b10d37 initial
dwinter
parents:
diff changeset
186 * $query->abort_search to TRUE to flag the query to be aborted.
015d06b10d37 initial
dwinter
parents:
diff changeset
187 *
015d06b10d37 initial
dwinter
parents:
diff changeset
188 * @param DrupalSolrQueryInterface $query
015d06b10d37 initial
dwinter
parents:
diff changeset
189 * An object implementing DrupalSolrQueryInterface. No need for &.
015d06b10d37 initial
dwinter
parents:
diff changeset
190 */
015d06b10d37 initial
dwinter
parents:
diff changeset
191 function hook_apachesolr_query_alter(DrupalSolrQueryInterface $query) {
015d06b10d37 initial
dwinter
parents:
diff changeset
192 // I only want to see articles by the admin.
015d06b10d37 initial
dwinter
parents:
diff changeset
193 //
015d06b10d37 initial
dwinter
parents:
diff changeset
194 // NOTE: this "is_uid" filter does NOT refer to the English word "is"
015d06b10d37 initial
dwinter
parents:
diff changeset
195 // It is a combination of flags representing Integer-Single, which is
015d06b10d37 initial
dwinter
parents:
diff changeset
196 // abbreviated with the letters i and s.
015d06b10d37 initial
dwinter
parents:
diff changeset
197 //
015d06b10d37 initial
dwinter
parents:
diff changeset
198 // @see the <dynamicField> definitions in schema.xml or schema-solr3.xml
015d06b10d37 initial
dwinter
parents:
diff changeset
199 $query->addFilter("is_uid", 1);
015d06b10d37 initial
dwinter
parents:
diff changeset
200
015d06b10d37 initial
dwinter
parents:
diff changeset
201 // Only search titles.
015d06b10d37 initial
dwinter
parents:
diff changeset
202 $query->replaceParam('qf', 'label');
015d06b10d37 initial
dwinter
parents:
diff changeset
203 }
015d06b10d37 initial
dwinter
parents:
diff changeset
204
015d06b10d37 initial
dwinter
parents:
diff changeset
205 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
206 * Allows a module to modify the delete query.
015d06b10d37 initial
dwinter
parents:
diff changeset
207 *
015d06b10d37 initial
dwinter
parents:
diff changeset
208 * @param string $query
015d06b10d37 initial
dwinter
parents:
diff changeset
209 * Defaults to *:*
015d06b10d37 initial
dwinter
parents:
diff changeset
210 * This is not an instance of DrupalSolrQueryInterface, it is the raw query that is being sent to Solr
015d06b10d37 initial
dwinter
parents:
diff changeset
211 */
015d06b10d37 initial
dwinter
parents:
diff changeset
212 function hook_apachesolr_delete_by_query_alter($query) {
015d06b10d37 initial
dwinter
parents:
diff changeset
213 // use the site hash so that you only delete this site's content
015d06b10d37 initial
dwinter
parents:
diff changeset
214 if ($query == '*:*') {
015d06b10d37 initial
dwinter
parents:
diff changeset
215 $query = 'hash:' . apachesolr_site_hash();
015d06b10d37 initial
dwinter
parents:
diff changeset
216 }
015d06b10d37 initial
dwinter
parents:
diff changeset
217 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
218 $query .= ' AND hash:' . apachesolr_site_hash();
015d06b10d37 initial
dwinter
parents:
diff changeset
219 }
015d06b10d37 initial
dwinter
parents:
diff changeset
220 }
015d06b10d37 initial
dwinter
parents:
diff changeset
221
015d06b10d37 initial
dwinter
parents:
diff changeset
222 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
223 * This is the place to look for the replacement to hook_apachesolr_node_exclude
015d06b10d37 initial
dwinter
parents:
diff changeset
224 * You should define a replacement for the status callback and return
015d06b10d37 initial
dwinter
parents:
diff changeset
225 * FALSE for entities which you do not want to appear in the index and TRUE for
015d06b10d37 initial
dwinter
parents:
diff changeset
226 * those that you want to include
015d06b10d37 initial
dwinter
parents:
diff changeset
227 */
015d06b10d37 initial
dwinter
parents:
diff changeset
228
015d06b10d37 initial
dwinter
parents:
diff changeset
229 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
230 * This is invoked for each entity that is being inspected to be added to the
015d06b10d37 initial
dwinter
parents:
diff changeset
231 * index. if any module returns TRUE, the entity is skipped for indexing.
015d06b10d37 initial
dwinter
parents:
diff changeset
232 *
015d06b10d37 initial
dwinter
parents:
diff changeset
233 * @param string $entity_id
015d06b10d37 initial
dwinter
parents:
diff changeset
234 * @param string $entity_type
015d06b10d37 initial
dwinter
parents:
diff changeset
235 * @param object $row
015d06b10d37 initial
dwinter
parents:
diff changeset
236 * A complete set of data from the indexing table.
015d06b10d37 initial
dwinter
parents:
diff changeset
237 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
238 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
239 * @return boolean
015d06b10d37 initial
dwinter
parents:
diff changeset
240 */
015d06b10d37 initial
dwinter
parents:
diff changeset
241 function hook_apachesolr_exclude($entity_id, $entity_type, $row, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
242 // Never index media entities to core_1
015d06b10d37 initial
dwinter
parents:
diff changeset
243 if ($entity_type == 'media' && $env_id == 'core_1') {
015d06b10d37 initial
dwinter
parents:
diff changeset
244 return TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
245 }
015d06b10d37 initial
dwinter
parents:
diff changeset
246 return FALSE;
015d06b10d37 initial
dwinter
parents:
diff changeset
247 }
015d06b10d37 initial
dwinter
parents:
diff changeset
248
015d06b10d37 initial
dwinter
parents:
diff changeset
249 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
250 * This is invoked for each entity from the type of ENTITY_TYPE that is being
015d06b10d37 initial
dwinter
parents:
diff changeset
251 * inspected to be added to the index. if any module returns TRUE, 
015d06b10d37 initial
dwinter
parents:
diff changeset
252 * the entity is skipped for indexing.
015d06b10d37 initial
dwinter
parents:
diff changeset
253 *
015d06b10d37 initial
dwinter
parents:
diff changeset
254 * @param string $entity_id
015d06b10d37 initial
dwinter
parents:
diff changeset
255 * @param object $row
015d06b10d37 initial
dwinter
parents:
diff changeset
256 * A complete set of data from the indexing table.
015d06b10d37 initial
dwinter
parents:
diff changeset
257 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
258 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
259 * @return boolean
015d06b10d37 initial
dwinter
parents:
diff changeset
260 */
015d06b10d37 initial
dwinter
parents:
diff changeset
261 function hook_apachesolr_ENTITY_TYPE_exclude($entity_id, $row, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
262 // Never index ENTITY_TYPE to core_1
015d06b10d37 initial
dwinter
parents:
diff changeset
263 if ($env_id == 'core_1') {
015d06b10d37 initial
dwinter
parents:
diff changeset
264 return TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
265 }
015d06b10d37 initial
dwinter
parents:
diff changeset
266 return FALSE;
015d06b10d37 initial
dwinter
parents:
diff changeset
267 }
015d06b10d37 initial
dwinter
parents:
diff changeset
268
015d06b10d37 initial
dwinter
parents:
diff changeset
269 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
270 * Add information to index other entities.
015d06b10d37 initial
dwinter
parents:
diff changeset
271 * There are some modules in http://drupal.org that can give a good example of
015d06b10d37 initial
dwinter
parents:
diff changeset
272 * custom entity indexing such as apachesolr_user, apachesolr_term
015d06b10d37 initial
dwinter
parents:
diff changeset
273 *
015d06b10d37 initial
dwinter
parents:
diff changeset
274 * @param array $entity_info
015d06b10d37 initial
dwinter
parents:
diff changeset
275 */
015d06b10d37 initial
dwinter
parents:
diff changeset
276 function hook_apachesolr_entity_info_alter(array &$entity_info) {
015d06b10d37 initial
dwinter
parents:
diff changeset
277 // REQUIRED VALUES
015d06b10d37 initial
dwinter
parents:
diff changeset
278 // myentity should be replaced with user/node/custom entity
015d06b10d37 initial
dwinter
parents:
diff changeset
279 $entity_info['node'] = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
280 // Set this entity as indexable
015d06b10d37 initial
dwinter
parents:
diff changeset
281 $entity_info['node']['indexable'] = TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
282 // Validate each entity if it can be indexed or not. Multiple callbacks are
015d06b10d37 initial
dwinter
parents:
diff changeset
283 // allowed. If one of them returns false it won't be indexed
015d06b10d37 initial
dwinter
parents:
diff changeset
284 $entity_info['node']['status callback'][] = 'apachesolr_index_node_status_callback';
015d06b10d37 initial
dwinter
parents:
diff changeset
285 // Build up a custom document.
015d06b10d37 initial
dwinter
parents:
diff changeset
286 $entity_info['node']['document callback'][] = 'apachesolr_index_node_solr_document';
015d06b10d37 initial
dwinter
parents:
diff changeset
287 // What to do when a reindex is issued. Most probably this will reset all the
015d06b10d37 initial
dwinter
parents:
diff changeset
288 // items in the index_table
015d06b10d37 initial
dwinter
parents:
diff changeset
289 $entity_info['node']['reindex callback'] = 'apachesolr_index_node_solr_reindex';
015d06b10d37 initial
dwinter
parents:
diff changeset
290
015d06b10d37 initial
dwinter
parents:
diff changeset
291 // OPTIONAL VALUES
015d06b10d37 initial
dwinter
parents:
diff changeset
292 // Index in a separate table? Useful for huge datasets.
015d06b10d37 initial
dwinter
parents:
diff changeset
293 $entity_info['node']['index_table'] = 'apachesolr_index_entities_node';
015d06b10d37 initial
dwinter
parents:
diff changeset
294 // Execute custom callback on each cron run.
015d06b10d37 initial
dwinter
parents:
diff changeset
295 // See apachesolr_index_node_check_table
015d06b10d37 initial
dwinter
parents:
diff changeset
296 $entity_info['node']['cron_check'] = 'apachesolr_index_node_check_table';
015d06b10d37 initial
dwinter
parents:
diff changeset
297 // Specific output processing for the results
015d06b10d37 initial
dwinter
parents:
diff changeset
298 $entity_info['node']['apachesolr']['result callback'] = 'apachesolr_search_node_result';
015d06b10d37 initial
dwinter
parents:
diff changeset
299
015d06b10d37 initial
dwinter
parents:
diff changeset
300 // BUNDLE SPECIFIC OVERRIDES
015d06b10d37 initial
dwinter
parents:
diff changeset
301 // The following can be overridden on a per-bundle basis.
015d06b10d37 initial
dwinter
parents:
diff changeset
302 // The bundle-specific settings will take precedence over the entity settings.
015d06b10d37 initial
dwinter
parents:
diff changeset
303 $entity_info['node']['bundles']['page']['apachesolr']['result callback'] = 'apachesolr_search_node_result';
015d06b10d37 initial
dwinter
parents:
diff changeset
304 $entity_info['node']['bundles']['page']['apachesolr']['status callback'][] = 'apachesolr_index_node_status_callback';
015d06b10d37 initial
dwinter
parents:
diff changeset
305 $entity_info['node']['bundles']['page']['apachesolr']['document callback'][] = 'apachesolr_index_node_solr_document';
015d06b10d37 initial
dwinter
parents:
diff changeset
306 }
015d06b10d37 initial
dwinter
parents:
diff changeset
307
015d06b10d37 initial
dwinter
parents:
diff changeset
308
015d06b10d37 initial
dwinter
parents:
diff changeset
309 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
310 * The is invoked by apachesolr_search.module for each document returned in a
015d06b10d37 initial
dwinter
parents:
diff changeset
311 * search. This has been introduced in 6.x-beta7 as a replacement for the call
015d06b10d37 initial
dwinter
parents:
diff changeset
312 * to HOOK_nodeapi().
015d06b10d37 initial
dwinter
parents:
diff changeset
313 *
015d06b10d37 initial
dwinter
parents:
diff changeset
314 * @param ApacheSolrDocument $document
015d06b10d37 initial
dwinter
parents:
diff changeset
315 * The ApacheSolrDocument instance.
015d06b10d37 initial
dwinter
parents:
diff changeset
316 * @param array $extra
015d06b10d37 initial
dwinter
parents:
diff changeset
317 * @param DrupalSolrQueryInterface $query
015d06b10d37 initial
dwinter
parents:
diff changeset
318 */
015d06b10d37 initial
dwinter
parents:
diff changeset
319 function hook_apachesolr_search_result_alter(ApacheSolrDocument $document, array &$extra, DrupalSolrQueryInterface $query) {
015d06b10d37 initial
dwinter
parents:
diff changeset
320 }
015d06b10d37 initial
dwinter
parents:
diff changeset
321
015d06b10d37 initial
dwinter
parents:
diff changeset
322 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
323 * This is invoked by apachesolr_search.module for the whole resultset returned
015d06b10d37 initial
dwinter
parents:
diff changeset
324 * in a search.
015d06b10d37 initial
dwinter
parents:
diff changeset
325 *
015d06b10d37 initial
dwinter
parents:
diff changeset
326 * @param array $results
015d06b10d37 initial
dwinter
parents:
diff changeset
327 * The returned search results.
015d06b10d37 initial
dwinter
parents:
diff changeset
328 * @param DrupalSolrQueryInterface $query
015d06b10d37 initial
dwinter
parents:
diff changeset
329 * The query for which we want to process the results from
015d06b10d37 initial
dwinter
parents:
diff changeset
330 */
015d06b10d37 initial
dwinter
parents:
diff changeset
331 function hook_apachesolr_process_results(array &$results, DrupalSolrQueryInterface $query) {
015d06b10d37 initial
dwinter
parents:
diff changeset
332 foreach ($results as $id => $result) {
015d06b10d37 initial
dwinter
parents:
diff changeset
333 $results[$id]['title'] = t('[Result] !title', array('!title' => $result['title']));
015d06b10d37 initial
dwinter
parents:
diff changeset
334 }
015d06b10d37 initial
dwinter
parents:
diff changeset
335 }
015d06b10d37 initial
dwinter
parents:
diff changeset
336
015d06b10d37 initial
dwinter
parents:
diff changeset
337 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
338 * Respond to search environment deletion.
015d06b10d37 initial
dwinter
parents:
diff changeset
339 *
015d06b10d37 initial
dwinter
parents:
diff changeset
340 * This hook is invoked from apachesolr_environment_delete() after the
015d06b10d37 initial
dwinter
parents:
diff changeset
341 * environment is removed from the database.
015d06b10d37 initial
dwinter
parents:
diff changeset
342 *
015d06b10d37 initial
dwinter
parents:
diff changeset
343 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
344 * The environment object that is being deleted.
015d06b10d37 initial
dwinter
parents:
diff changeset
345 */
015d06b10d37 initial
dwinter
parents:
diff changeset
346 function hook_apachesolr_environment_delete(array $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
347 }
015d06b10d37 initial
dwinter
parents:
diff changeset
348
015d06b10d37 initial
dwinter
parents:
diff changeset
349 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
350 *
015d06b10d37 initial
dwinter
parents:
diff changeset
351 * Modify the build array for any search output build by Apache Solr
015d06b10d37 initial
dwinter
parents:
diff changeset
352 * This includes core and custom pages and makes it very easy to modify both
015d06b10d37 initial
dwinter
parents:
diff changeset
353 * of them at once
015d06b10d37 initial
dwinter
parents:
diff changeset
354 *
015d06b10d37 initial
dwinter
parents:
diff changeset
355 * @param array $build
015d06b10d37 initial
dwinter
parents:
diff changeset
356 * @param array $search_page
015d06b10d37 initial
dwinter
parents:
diff changeset
357 */
015d06b10d37 initial
dwinter
parents:
diff changeset
358 function hook_apachesolr_search_page_alter(array &$build, array $search_page) {
015d06b10d37 initial
dwinter
parents:
diff changeset
359 // Adds a text to the top of the page
015d06b10d37 initial
dwinter
parents:
diff changeset
360 $info = array('#markup' => t('Add information to every search page'));
015d06b10d37 initial
dwinter
parents:
diff changeset
361 array_unshift($build, $info);
015d06b10d37 initial
dwinter
parents:
diff changeset
362 }
015d06b10d37 initial
dwinter
parents:
diff changeset
363
015d06b10d37 initial
dwinter
parents:
diff changeset
364 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
365 * Modify the search types as found in the search pages administration
015d06b10d37 initial
dwinter
parents:
diff changeset
366 *
015d06b10d37 initial
dwinter
parents:
diff changeset
367 * @param array $search_types
015d06b10d37 initial
dwinter
parents:
diff changeset
368 */
015d06b10d37 initial
dwinter
parents:
diff changeset
369 function hook_apachesolr_search_types_alter(&$search_types) {
015d06b10d37 initial
dwinter
parents:
diff changeset
370 $search_types['ss_language'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
371 'name' => apachesolr_field_name_map('ss_language'),
015d06b10d37 initial
dwinter
parents:
diff changeset
372 'default menu' => 'search/language/%',
015d06b10d37 initial
dwinter
parents:
diff changeset
373 'title callback' => 'custom_title_callback',
015d06b10d37 initial
dwinter
parents:
diff changeset
374 );
015d06b10d37 initial
dwinter
parents:
diff changeset
375 }
015d06b10d37 initial
dwinter
parents:
diff changeset
376
015d06b10d37 initial
dwinter
parents:
diff changeset
377 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
378 * Build the documents before sending them to Solr.
015d06b10d37 initial
dwinter
parents:
diff changeset
379 * The function is the follow-up for apachesolr_update_index
015d06b10d37 initial
dwinter
parents:
diff changeset
380 *
015d06b10d37 initial
dwinter
parents:
diff changeset
381 * @param ApacheSolrDocument $document
015d06b10d37 initial
dwinter
parents:
diff changeset
382 * @param object $entity
015d06b10d37 initial
dwinter
parents:
diff changeset
383 * @param string $entity_type
015d06b10d37 initial
dwinter
parents:
diff changeset
384 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
385 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
386 */
015d06b10d37 initial
dwinter
parents:
diff changeset
387 function hook_apachesolr_index_document_build(ApacheSolrDocument $document, $entity, $entity_type, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
388
015d06b10d37 initial
dwinter
parents:
diff changeset
389 }
015d06b10d37 initial
dwinter
parents:
diff changeset
390
015d06b10d37 initial
dwinter
parents:
diff changeset
391 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
392 * Build the documents before sending them to Solr.
015d06b10d37 initial
dwinter
parents:
diff changeset
393 *
015d06b10d37 initial
dwinter
parents:
diff changeset
394 * Supports all types of
015d06b10d37 initial
dwinter
parents:
diff changeset
395 * hook_apachesolr_index_document_build_' . $entity_type($documents[$id], $entity, $env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
396 *
015d06b10d37 initial
dwinter
parents:
diff changeset
397 * The function is the follow-up for apachesolr_update_index but then for
015d06b10d37 initial
dwinter
parents:
diff changeset
398 * specific entity types
015d06b10d37 initial
dwinter
parents:
diff changeset
399 *
015d06b10d37 initial
dwinter
parents:
diff changeset
400 * @param ApacheSolrDocument $document
015d06b10d37 initial
dwinter
parents:
diff changeset
401 * @param object $entity
015d06b10d37 initial
dwinter
parents:
diff changeset
402 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
403 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
404 */
015d06b10d37 initial
dwinter
parents:
diff changeset
405 function hook_apachesolr_index_document_build_ENTITY_TYPE(ApacheSolrDocument $document, $entity, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
406 // Index field_main_image as a separate field
015d06b10d37 initial
dwinter
parents:
diff changeset
407 if ($entity->type == 'profile') {
015d06b10d37 initial
dwinter
parents:
diff changeset
408 $user = user_load(array('uid' => $entity->uid));
015d06b10d37 initial
dwinter
parents:
diff changeset
409 // Hard coded field, not recommended for inexperienced users.
015d06b10d37 initial
dwinter
parents:
diff changeset
410 $document->setMultiValue('sm_field_main_image', $user->picture);
015d06b10d37 initial
dwinter
parents:
diff changeset
411 }
015d06b10d37 initial
dwinter
parents:
diff changeset
412 }
015d06b10d37 initial
dwinter
parents:
diff changeset
413
015d06b10d37 initial
dwinter
parents:
diff changeset
414 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
415 * Alter the prepared documents from one entity before sending them to Solr.
015d06b10d37 initial
dwinter
parents:
diff changeset
416 *
015d06b10d37 initial
dwinter
parents:
diff changeset
417 * @param $documents
015d06b10d37 initial
dwinter
parents:
diff changeset
418 * Array of ApacheSolrDocument objects.
015d06b10d37 initial
dwinter
parents:
diff changeset
419 * @param object $entity
015d06b10d37 initial
dwinter
parents:
diff changeset
420 * @param string $entity_type
015d06b10d37 initial
dwinter
parents:
diff changeset
421 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
422 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
423 */
015d06b10d37 initial
dwinter
parents:
diff changeset
424 function hook_apachesolr_index_documents_alter(array &$documents, $entity, $entity_type, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
425 // Do whatever altering you need here
015d06b10d37 initial
dwinter
parents:
diff changeset
426 }