Search/Indexing

* move fulltext indizes for tables /w ~10k+ rows to separate tables
   > sounds have ~12k but names are effectively incompatible with FTI
 * normalize searchable strings to catch edgecases
   > preparse spell descriptions + buffs
   > move effect text cols of items to new table
 * also fix extended search of creatures, spells & quests
This commit is contained in:
Sarjuuk 2026-03-03 14:58:19 +01:00
parent 2161a7b846
commit 5a230daad6
28 changed files with 648 additions and 165 deletions

View file

@ -578,11 +578,6 @@ CREATE TABLE `aowow_creature` (
KEY `idx_skinloot` (`skinLootId`),
KEY `idx_trainer` (`trainerType`),
KEY `idx_trainerrequirement` (`trainerRequirement`),
FULLTEXT `idx_ft_name0` (`name_loc0`),
FULLTEXT `idx_ft_name2` (`name_loc2`),
FULLTEXT `idx_ft_name3` (`name_loc3`),
FULLTEXT `idx_ft_name6` (`name_loc6`),
FULLTEXT `idx_ft_name8` (`name_loc8`),
KEY `idx_name0` (`name_loc0`),
KEY `idx_name2` (`name_loc2`),
KEY `idx_name3` (`name_loc3`),
@ -600,6 +595,24 @@ CREATE TABLE `aowow_creature` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_creature_search`
--
DROP TABLE IF EXISTS `aowow_creature_search`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aowow_creature_search` (
`id` mediumint(8) unsigned NOT NULL,
`locale` tinyint(3) unsigned NOT NULL,
`nName` varchar(100) DEFAULT NULL,
`nSubname` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`,`locale`),
FULLTEXT KEY `idx_ft_na` (`nName`),
FULLTEXT KEY `idx_ft_na_ex` (`nName`,`nSubname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_creature_sounds`
--
@ -1460,12 +1473,6 @@ CREATE TABLE `aowow_items` (
`sheatheSoundId` smallint(5) unsigned NOT NULL DEFAULT 0,
`unsheatheSoundId` smallint(5) unsigned NOT NULL DEFAULT 0,
`flagsCustom` int(10) unsigned NOT NULL DEFAULT 0,
`effects_loc0` text DEFAULT NULL,
`effects_loc2` text DEFAULT NULL,
`effects_loc3` text DEFAULT NULL,
`effects_loc4` text DEFAULT NULL,
`effects_loc6` text DEFAULT NULL,
`effects_loc8` text DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `items_index` (`class`),
KEY `idx_model` (`displayId`),
@ -1482,11 +1489,6 @@ CREATE TABLE `aowow_items` (
KEY `idx_trigger4` (`spellTrigger4`),
KEY `idx_trigger5` (`spellTrigger5`),
KEY `idx_reqskill` (`requiredSkill`),
FULLTEXT `idx_ft_name0` (`name_loc0`),
FULLTEXT `idx_ft_name2` (`name_loc2`),
FULLTEXT `idx_ft_name3` (`name_loc3`),
FULLTEXT `idx_ft_name6` (`name_loc6`),
FULLTEXT `idx_ft_name8` (`name_loc8`),
KEY `idx_name0` (`name_loc0`),
KEY `idx_name2` (`name_loc2`),
KEY `idx_name3` (`name_loc3`),
@ -1497,6 +1499,26 @@ CREATE TABLE `aowow_items` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_items_search`
--
DROP TABLE IF EXISTS `aowow_items_search`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aowow_items_search` (
`id` mediumint(8) unsigned NOT NULL,
`locale` tinyint(3) unsigned NOT NULL,
`nName` varchar(127) DEFAULT NULL,
`nDescription` varchar(255) DEFAULT NULL,
`nEffects` text DEFAULT NULL,
PRIMARY KEY (`id`,`locale`),
FULLTEXT KEY `idx_ft_na` (`nName`),
FULLTEXT KEY `idx_ft_description` (`nDescription`),
FULLTEXT KEY `idx_ft_effects` (`nEffects`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_items_sounds`
--
@ -1682,11 +1704,6 @@ CREATE TABLE `aowow_objects` (
KEY `idx_onsuccessspell` (`onSuccessSpell`),
KEY `idx_auraspell` (`auraSpell`),
KEY `idx_triggeredspell` (`triggeredSpell`),
FULLTEXT `idx_ft_name0` (`name_loc0`),
FULLTEXT `idx_ft_name2` (`name_loc2`),
FULLTEXT `idx_ft_name3` (`name_loc3`),
FULLTEXT `idx_ft_name6` (`name_loc6`),
FULLTEXT `idx_ft_name8` (`name_loc8`),
KEY `idx_name0` (`name_loc0`),
KEY `idx_name2` (`name_loc2`),
KEY `idx_name3` (`name_loc3`),
@ -1696,6 +1713,22 @@ CREATE TABLE `aowow_objects` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_objects_search`
--
DROP TABLE IF EXISTS `aowow_objects_search`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aowow_objects_search` (
`id` mediumint(8) unsigned NOT NULL,
`locale` tinyint(3) unsigned NOT NULL,
`nName` varchar(127) DEFAULT NULL,
PRIMARY KEY (`id`,`locale`),
FULLTEXT KEY `idx_ft_na` (`nName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_pet`
--
@ -2291,11 +2324,6 @@ CREATE TABLE `aowow_quests` (
`objectiveText4_loc8` text DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `nextQuestIdChain` (`nextQuestIdChain`),
FULLTEXT `idx_ft_name0` (`name_loc0`),
FULLTEXT `idx_ft_name2` (`name_loc2`),
FULLTEXT `idx_ft_name3` (`name_loc3`),
FULLTEXT `idx_ft_name6` (`name_loc6`),
FULLTEXT `idx_ft_name8` (`name_loc8`),
KEY `idx_name0` (`name_loc0`),
KEY `idx_name2` (`name_loc2`),
KEY `idx_name3` (`name_loc3`),
@ -2331,6 +2359,25 @@ CREATE TABLE `aowow_quests` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_quests_search`
--
DROP TABLE IF EXISTS `aowow_quests_search`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aowow_quests_search` (
`id` mediumint(8) unsigned NOT NULL,
`locale` tinyint(3) unsigned NOT NULL,
`nName` varchar(100) DEFAULT NULL,
`nObjectives` text DEFAULT NULL,
`nDetails` text DEFAULT NULL,
PRIMARY KEY (`id`,`locale`),
FULLTEXT KEY `idx_ft_na` (`nName`),
FULLTEXT KEY `idx_ft_na_ex` (`nName`,`nObjectives`,`nDetails`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_quests_startend`
--
@ -2905,11 +2952,6 @@ CREATE TABLE `aowow_spell` (
KEY `effect3AuraId` (`effect3AuraId`),
KEY `idx_skill1` (`skillLine1`),
KEY `idx_skill2` (`skillLine2OrMask`),
FULLTEXT `idx_ft_name0` (`name_loc0`),
FULLTEXT `idx_ft_name2` (`name_loc2`),
FULLTEXT `idx_ft_name3` (`name_loc3`),
FULLTEXT `idx_ft_name6` (`name_loc6`),
FULLTEXT `idx_ft_name8` (`name_loc8`),
KEY `idx_name0` (`name_loc0`),
KEY `idx_name2` (`name_loc2`),
KEY `idx_name3` (`name_loc3`),
@ -2926,6 +2968,25 @@ CREATE TABLE `aowow_spell` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_spell_search`
--
DROP TABLE IF EXISTS `aowow_spell_search`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aowow_spell_search` (
`id` mediumint(8) unsigned NOT NULL,
`locale` tinyint(3) unsigned NOT NULL,
`nName` varchar(185) DEFAULT NULL,
`nDescription` text DEFAULT NULL,
`nBuff` text DEFAULT NULL,
PRIMARY KEY (`id`,`locale`),
FULLTEXT KEY `idx_ft_na` (`nName`),
FULLTEXT KEY `idx_ft_na_ex` (`nName`,`nDescription`,`nBuff`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `aowow_spell_sounds`
--