|
1 <?php |
|
2 |
|
3 /** |
|
4 * @file |
|
5 * Install, update and uninstall functions for the search module. |
|
6 */ |
|
7 |
|
8 /** |
|
9 * Implements hook_uninstall(). |
|
10 */ |
|
11 function search_uninstall() { |
|
12 variable_del('minimum_word_size'); |
|
13 variable_del('overlap_cjk'); |
|
14 variable_del('search_cron_limit'); |
|
15 variable_del('search_logging'); |
|
16 } |
|
17 |
|
18 /** |
|
19 * Implements hook_schema(). |
|
20 */ |
|
21 function search_schema() { |
|
22 $schema['search_dataset'] = array( |
|
23 'description' => 'Stores items that will be searched.', |
|
24 'fields' => array( |
|
25 'sid' => array( |
|
26 'type' => 'int', |
|
27 'unsigned' => TRUE, |
|
28 'not null' => TRUE, |
|
29 'default' => 0, |
|
30 'description' => 'Search item ID, e.g. node ID for nodes.', |
|
31 ), |
|
32 'type' => array( |
|
33 'type' => 'varchar', |
|
34 'length' => 16, |
|
35 'not null' => TRUE, |
|
36 'description' => 'Type of item, e.g. node.', |
|
37 ), |
|
38 'data' => array( |
|
39 'type' => 'text', |
|
40 'not null' => TRUE, |
|
41 'size' => 'big', |
|
42 'description' => 'List of space-separated words from the item.', |
|
43 ), |
|
44 'reindex' => array( |
|
45 'type' => 'int', |
|
46 'unsigned' => TRUE, |
|
47 'not null' => TRUE, |
|
48 'default' => 0, |
|
49 'description' => 'Set to force node reindexing.', |
|
50 ), |
|
51 ), |
|
52 'primary key' => array('sid', 'type'), |
|
53 ); |
|
54 |
|
55 $schema['search_index'] = array( |
|
56 'description' => 'Stores the search index, associating words, items and scores.', |
|
57 'fields' => array( |
|
58 'word' => array( |
|
59 'type' => 'varchar', |
|
60 'length' => 50, |
|
61 'not null' => TRUE, |
|
62 'default' => '', |
|
63 'description' => 'The {search_total}.word that is associated with the search item.', |
|
64 ), |
|
65 'sid' => array( |
|
66 'type' => 'int', |
|
67 'unsigned' => TRUE, |
|
68 'not null' => TRUE, |
|
69 'default' => 0, |
|
70 'description' => 'The {search_dataset}.sid of the searchable item to which the word belongs.', |
|
71 ), |
|
72 'type' => array( |
|
73 'type' => 'varchar', |
|
74 'length' => 16, |
|
75 'not null' => TRUE, |
|
76 'description' => 'The {search_dataset}.type of the searchable item to which the word belongs.', |
|
77 ), |
|
78 'score' => array( |
|
79 'type' => 'float', |
|
80 'not null' => FALSE, |
|
81 'description' => 'The numeric score of the word, higher being more important.', |
|
82 ), |
|
83 ), |
|
84 'indexes' => array( |
|
85 'sid_type' => array('sid', 'type'), |
|
86 ), |
|
87 'foreign keys' => array( |
|
88 'search_dataset' => array( |
|
89 'table' => 'search_dataset', |
|
90 'columns' => array( |
|
91 'sid' => 'sid', |
|
92 'type' => 'type', |
|
93 ), |
|
94 ), |
|
95 ), |
|
96 'primary key' => array('word', 'sid', 'type'), |
|
97 ); |
|
98 |
|
99 $schema['search_total'] = array( |
|
100 'description' => 'Stores search totals for words.', |
|
101 'fields' => array( |
|
102 'word' => array( |
|
103 'description' => 'Primary Key: Unique word in the search index.', |
|
104 'type' => 'varchar', |
|
105 'length' => 50, |
|
106 'not null' => TRUE, |
|
107 'default' => '', |
|
108 ), |
|
109 'count' => array( |
|
110 'description' => "The count of the word in the index using Zipf's law to equalize the probability distribution.", |
|
111 'type' => 'float', |
|
112 'not null' => FALSE, |
|
113 ), |
|
114 ), |
|
115 'primary key' => array('word'), |
|
116 ); |
|
117 |
|
118 $schema['search_node_links'] = array( |
|
119 'description' => 'Stores items (like nodes) that link to other nodes, used to improve search scores for nodes that are frequently linked to.', |
|
120 'fields' => array( |
|
121 'sid' => array( |
|
122 'type' => 'int', |
|
123 'unsigned' => TRUE, |
|
124 'not null' => TRUE, |
|
125 'default' => 0, |
|
126 'description' => 'The {search_dataset}.sid of the searchable item containing the link to the node.', |
|
127 ), |
|
128 'type' => array( |
|
129 'type' => 'varchar', |
|
130 'length' => 16, |
|
131 'not null' => TRUE, |
|
132 'default' => '', |
|
133 'description' => 'The {search_dataset}.type of the searchable item containing the link to the node.', |
|
134 ), |
|
135 'nid' => array( |
|
136 'type' => 'int', |
|
137 'unsigned' => TRUE, |
|
138 'not null' => TRUE, |
|
139 'default' => 0, |
|
140 'description' => 'The {node}.nid that this item links to.', |
|
141 ), |
|
142 'caption' => array( |
|
143 'type' => 'text', |
|
144 'size' => 'big', |
|
145 'not null' => FALSE, |
|
146 'description' => 'The text used to link to the {node}.nid.', |
|
147 ), |
|
148 ), |
|
149 'primary key' => array('sid', 'type', 'nid'), |
|
150 'indexes' => array( |
|
151 'nid' => array('nid'), |
|
152 ), |
|
153 ); |
|
154 |
|
155 return $schema; |
|
156 } |
|
157 |
|
158 /** |
|
159 * Replace unique keys in 'search_dataset' and 'search_index' by primary keys. |
|
160 */ |
|
161 function search_update_7000() { |
|
162 db_drop_unique_key('search_dataset', 'sid_type'); |
|
163 $dataset_type_spec = array( |
|
164 'type' => 'varchar', |
|
165 'length' => 16, |
|
166 'not null' => TRUE, |
|
167 'description' => 'Type of item, e.g. node.', |
|
168 ); |
|
169 db_change_field('search_dataset', 'type', 'type', $dataset_type_spec); |
|
170 db_add_primary_key('search_dataset', array('sid', 'type')); |
|
171 |
|
172 db_drop_index('search_index', 'word'); |
|
173 db_drop_unique_key('search_index', 'word_sid_type'); |
|
174 $index_type_spec = array( |
|
175 'type' => 'varchar', |
|
176 'length' => 16, |
|
177 'not null' => TRUE, |
|
178 'description' => 'The {search_dataset}.type of the searchable item to which the word belongs.', |
|
179 ); |
|
180 db_change_field('search_index', 'type', 'type', $index_type_spec); |
|
181 db_add_primary_key('search_index', array('word', 'sid', 'type')); |
|
182 } |
|
183 |