Příručka:Databázová tabulka searchindex

From mediawiki.org
This page is a translated version of the page Manual:Searchindex table and the translation is 100% complete.
Manuál:Obsah MediaWiki schéma databáze Tabulka searchindex

S tabulkou searchindex se pracuje při fulltextovém vyhledávání (viz searches ). U MySQL nužších verzí než 5.6, bylo možné fulltextové indexování jen pokud byla tabulka typu MyISAM, ale ne InnoDB. Jenže tabulka text je však typu InnoDB, protože je výhodnější z hlediska výkonu při souběžném přístupu k datům, takže aby bylo možné využít indexování na straně databáze, bylo nutné pro každou stránku vytvořit kopii. A to je důvod proč existuje tato tabulka. Pokud používáte Postgres, tato tabulka neexistuje: Úplné textové informace jsou uloženy přímo v tabulkách page a pagecontent jako sloupce titlevector a textvector.

Tato tabulka se vyplní při uložení úprav na stránkách, pokud není $wgDisableSearchUpdate nastaveno na true nebo není nainstalováno rozšíření, které implementuje svůj vlastní index vyhledávání (např. rozšíření CirrusSearch ). Skript údržby rebuildtextindex.php lze použít k naplnění od začátku nebo updateSearchIndex.php k aktualizaci pro nedávno změněné stránky.

Pole

si_page

Klíč k page_id .

si_title

Potlačená verze názvu stránky.

si_text

Změněná verze aktuálního textu stránky.

Podrobnosti

Používané indexy využívající anglickou Wikipedii pro mohutnost:

+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table       | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| searchindex |          0 | si_page  |            1 | si_page     | A         |      797275 |     NULL | NULL   |      | BTREE      |         |
| searchindex |          1 | si_title |            1 | si_title    | A         |      265758 |     NULL | NULL   |      | FULLTEXT   |         |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

Běžný vyhledávací dotaz má tvar:

SELECT page_id, page_namespace, page_title FROM `page`,`searchindex`
WHERE page_id=si_page
AND MATCH(si_text) AGAINST('+''searchterm''' IN BOOLEAN MODE)
AND page_is_redirect=0
AND page_namespace IN (0)
LIMIT 20

V MediaWiki verze 1.4 a starší:

SELECT cur_id,cur_namespace,cur_title,cur_text FROM cur,searchindex
WHERE cur_id=si_page
AND (
  MATCH(si_text) AGAINST('+''searchterm''' IN BOOLEAN MODE)
  AND cur_is_redirect=0
)
AND cur_namespace IN (0,9,11)
LIMIT 0, 20;

Vysvětlení ukazuje následující:

+-------------+--------+-------------------------------------------+---------------+---------+------------+--------+-------------+
| table       | type   | possible_keys                             | key           | key_len | ref        | rows   | Extra       |
+-------------+--------+-------------------------------------------+---------------+---------+------------+--------+-------------+
| cur         | range  | cur_id,cur_namespace,name_title_timestamp | cur_namespace |       1 | NULL       | 317499 | Using where |
| searchindex | eq_ref | si_page                                   | si_page       |       4 | cur.cur_id |      1 | Using where |
+-------------+--------+-------------------------------------------+---------------+---------+------------+--------+-------------+

Známé problémy

Skenování rozsahu s jmennými prostory obsahujícími velký počet záznamů vyžaduje, aby byla velká část tabulky searchindex načtena do paměti RAM. To je velmi nákladné, částečně proto, že tabulka searchindex obsahuje celý text článku. Dlouhodobým plánem je odstranit text z tabulky searchindex. Dočasná opatření mohou zahrnovat přidání polí do searchindex a jejich indexování (a použití vlastního spojení, aby bylo možné použít tento index i fulltextový index) nebo přidání indexu searchindex ke snížení počtu úplných záznamů searchindex, které je třeba přečíst, aby odpovídaly dotazu.

Přehled změn ve schématu tabulky

Verze MediaWiki:
1.10

DESCRIBE searchindex;

+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| si_page  | int(10) unsigned | NO   | PRI | NULL    |       |
| si_title | varchar(255)     | NO   | MUL |         |       |
| si_text  | mediumtext       | NO   | MUL | NULL    |       |
+----------+------------------+------+-----+---------+-------+
Verze MediaWiki:
1.1 – 1.9

DESCRIBE searchindex;

+----------+-----------------+------+-----+---------+-------+
| Field    | Type            | Null | Key | Default | Extra |
+----------+-----------------+------+-----+---------+-------+
| si_page  | int(8) unsigned | NO   | PRI | NULL    |       |
| si_title | varchar(255)    | NO   | MUL | NULL    |       |
| si_text  | mediumtext      | NO   | MUL | NULL    |       |
+----------+-----------------+------+-----+---------+-------+

Indexy

Verze MediaWiki:
1.4

SHOW INDEX IN searchindex;

+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table       | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| searchindex |          0 | si_page  |            1 | si_page     | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| searchindex |          1 | si_title |            1 | si_title    | NULL      |           0 |     NULL | NULL   |      | FULLTEXT   |         |               |
| searchindex |          1 | si_text  |            1 | si_text     | NULL      |           0 |     NULL | NULL   |      | FULLTEXT   |         |               |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+