在执行全文搜索时,按MyISAM之类的相关性对MySQL InnoDB表进行排序

时间:2020-05-12 13:27:29

标签: mysql sorting full-text-search innodb

我在MySQL 5.6.47-87.0-log中创建了一个表。 db-type为MyISAM,内容为德语。我做了全文索引,以便能够进行如下查询:

SELECT * 
FROM table1_myisam 
WHERE MATCH (row1) AGAINST ('nach dem Rechten sehen') 
LIMIT 0,10

这很好用,但是有一个缺点:查询使用停用词列表,这是英语的标准列表,但是德语中也存在相关的单词(好的,之后,之后,在这里,简短的是在一个上午)。我无法以ft_stopword_file =“”模式重新启动MySQL服务器,因为它是共享主机,我的提供程序不支持它。

所以我试图将表更改为InnoDB。这行得通,但我看不到任何相关性:

SELECT * 
FROM table1_innodb 
WHERE MATCH (row1) AGAINST ('nach dem Rechten sehen') 
LIMIT 0,10

这是2个测试表的SQL。它们完全相同,但是一个在InnoDB中,另一个在MyISAM中。完全存在搜索字符串“ nach dem Rechten sehen”(标识1606)。在MyIsam-Table中,该条目排在首位,但在InnoDB-table中则不是。有没有办法像MyISAM-one那样按相关性对InnoDB结果进行排序?

CREATE TABLE `table1_innodb` (
  `id` int(11) NOT NULL,
  `row1` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=1;

INSERT INTO `table1_innodb` (`id`, `row1`) VALUES
(66, 'jemandem nach dem Mund / Munde / Maul reden'),
(78, 'weisse Maeuse sehen'),
(118, 'den Wald vor lauter Baeumen nicht sehen'),
(151, 'Das werden wir sehen!'),
(207, 'jemandem auf die Finger schauen / gucken / sehen'),
(347, 'das Kind beim (rechten) Namen nennen'),
(417, 'seine Felle wegschwimmen / davonschwimmen / fortschwimmen sehen'),
(482, 'in die Roehre gucken / schauen / glotzen / sehen'),
(491, 'etwas / alles durch die rosarote Brille sehen'),
(607, 'Man hat schon Pferde kotzen sehen / gesehen!'),
(978, 'etwas mit einem lachenden und einem weinenden Auge sehen'),
(992, 'etwas mit anderen Augen sehen / betrachten'),
(1024, 'etwas mit eigenen Augen sehen'),
(1356, 'nach dem Bettzipfel schielen'),
(1606, 'nach dem Rechten sehen'),
(1614, 'sich an die / den Buchstaben des Gesetzes halten; nach dem / den Buchstaben des Gesetzes handeln; sich nach dem / den Buchstaben des Gesetzes richten; am / an den Buchstaben des Gesetzes kleben / haengen'),
(1782, 'nicht mit rechten Dingen zugehen'),
(2063, 'das Herz am / auf dem rechten / richtigen Fleck haben / tragen'),
(2257, 'sich / die Fahne / das Faehnchen nach dem Wind drehen / haengen / richten'),
(3373, 'Nach mir die Sintflut! Nach uns die Sintflut!'),
(3553, 'die Hand nicht vor (den) Augen sehen (koennen); keine Hand vor Augen sehen (koennen)'),
(5051, 'jemandem nach dem Leben trachten'),
(5531, 'nach dem Mond gehen'),
(5538, 'nach dem Mond greifen'),
(5597, 'den Mund / das Maul / die Schnauze am / auf dem rechten Fleck haben'),
(5653, 'nach und nach'),
(6324, '(bei jemandem) an den Rechten / Richtigen geraten / kommen'),
(7031, 'Nach dem Sturm ist vor dem Sturm'),
(7261, 'zu / nach den Sternen greifen; einen Griff nach / zu den Sternen tun'),
(7542, 'dem Tod ins Auge schauen / sehen'),
(7816, 'dem Vernehmen nach'),
(7976, 'vom rechten Weg / Kurs abkommen'),
(8193, 'mit der Wurst nach dem Schinken / der Speckseite werfen'),
(8683, 'seinen Mantel / sein Maentelchen nach dem Wind haengen'),
(8871, 'Ist die Katze aus dem Haus, tanzen die Maeuse auf dem Tisch; Ist die Katz aus dem Haus, ruehrt sich die Maus; Wenn die Katze aus dem Haus ist, tanzen die Maeuse'),
(8962, 'nach dem Adlersuchsystem schreiben'),
(8984, 'auf dem linken / rechten Auge blind sein'),
(9145, 'etwas auf einer / der (halben / linken / rechten) Backe / Arschbacke absitzen'),
(10349, 'etwas nach dem Giesskannenprinzip verteilen'),
(11399, 'mit dem Schinken nach der Wurst werfen'),
(11684, 'nach dem gleichen Strickmuster'),
(11938, 'jemanden / etwas auf den rechten Weg bringen / fuehren'),
(12682, 'nach dem rettenden Strohhalm greifen'),
(13318, 'keinen rechten Schwung haben'),
(13332, 'eins nach dem anderen'),
(13510, 'auf dem rechten Weg sein'),
(14024, 'jemandem steht der Kopf nicht nach etwas; jemandem steht nicht der Kopf nach etwas'),
(14120, 'nicht nach rechts und (nicht nach) links sehen / blicken / schauen; nicht nach links und (nicht nach) rechts sehen / blicken / schauen'),
(14632, 'jemanden vom rechten Weg / Kurs abbringen'),
(15026, 'mit dem linken Auge in die rechte Hosentasche gucken / schauen (koennen); mit dem rechten Auge in die linke Hosentasche gucken / schauen (koennen)');

ALTER TABLE `table1_innodb` ADD PRIMARY KEY (`id`);
ALTER TABLE `table1_innodb` ADD FULLTEXT KEY `ind_row1` (`row1`);



CREATE TABLE `table1_myisam` (
  `id` int(11) NOT NULL,
  `row1` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1;

INSERT INTO `table1_myisam` (`id`, `row1`) VALUES
(66, 'jemandem nach dem Mund / Munde / Maul reden'),
(78, 'weisse Maeuse sehen'),
(118, 'den Wald vor lauter Baeumen nicht sehen'),
(151, 'Das werden wir sehen!'),
(207, 'jemandem auf die Finger schauen / gucken / sehen'),
(347, 'das Kind beim (rechten) Namen nennen'),
(417, 'seine Felle wegschwimmen / davonschwimmen / fortschwimmen sehen'),
(482, 'in die Roehre gucken / schauen / glotzen / sehen'),
(491, 'etwas / alles durch die rosarote Brille sehen'),
(607, 'Man hat schon Pferde kotzen sehen / gesehen!'),
(978, 'etwas mit einem lachenden und einem weinenden Auge sehen'),
(992, 'etwas mit anderen Augen sehen / betrachten'),
(1024, 'etwas mit eigenen Augen sehen'),
(1356, 'nach dem Bettzipfel schielen'),
(1606, 'nach dem Rechten sehen'),
(1614, 'sich an die / den Buchstaben des Gesetzes halten; nach dem / den Buchstaben des Gesetzes handeln; sich nach dem / den Buchstaben des Gesetzes richten; am / an den Buchstaben des Gesetzes kleben / haengen'),
(1782, 'nicht mit rechten Dingen zugehen'),
(2063, 'das Herz am / auf dem rechten / richtigen Fleck haben / tragen'),
(2257, 'sich / die Fahne / das Faehnchen nach dem Wind drehen / haengen / richten'),
(3373, 'Nach mir die Sintflut! Nach uns die Sintflut!'),
(3553, 'die Hand nicht vor (den) Augen sehen (koennen); keine Hand vor Augen sehen (koennen)'),
(5051, 'jemandem nach dem Leben trachten'),
(5531, 'nach dem Mond gehen'),
(5538, 'nach dem Mond greifen'),
(5597, 'den Mund / das Maul / die Schnauze am / auf dem rechten Fleck haben'),
(5653, 'nach und nach'),
(6324, '(bei jemandem) an den Rechten / Richtigen geraten / kommen'),
(7031, 'Nach dem Sturm ist vor dem Sturm'),
(7261, 'zu / nach den Sternen greifen; einen Griff nach / zu den Sternen tun'),
(7542, 'dem Tod ins Auge schauen / sehen'),
(7816, 'dem Vernehmen nach'),
(7976, 'vom rechten Weg / Kurs abkommen'),
(8193, 'mit der Wurst nach dem Schinken / der Speckseite werfen'),
(8683, 'seinen Mantel / sein Maentelchen nach dem Wind haengen'),
(8871, 'Ist die Katze aus dem Haus, tanzen die Maeuse auf dem Tisch; Ist die Katz aus dem Haus, ruehrt sich die Maus; Wenn die Katze aus dem Haus ist, tanzen die Maeuse'),
(8962, 'nach dem Adlersuchsystem schreiben'),
(8984, 'auf dem linken / rechten Auge blind sein'),
(9145, 'etwas auf einer / der (halben / linken / rechten) Backe / Arschbacke absitzen'),
(10349, 'etwas nach dem Giesskannenprinzip verteilen'),
(11399, 'mit dem Schinken nach der Wurst werfen'),
(11684, 'nach dem gleichen Strickmuster'),
(11938, 'jemanden / etwas auf den rechten Weg bringen / fuehren'),
(12682, 'nach dem rettenden Strohhalm greifen'),
(13318, 'keinen rechten Schwung haben'),
(13332, 'eins nach dem anderen'),
(13510, 'auf dem rechten Weg sein'),
(14024, 'jemandem steht der Kopf nicht nach etwas; jemandem steht nicht der Kopf nach etwas'),
(14120, 'nicht nach rechts und (nicht nach) links sehen / blicken / schauen; nicht nach links und (nicht nach) rechts sehen / blicken / schauen'),
(14632, 'jemanden vom rechten Weg / Kurs abbringen'),
(15026, 'mit dem linken Auge in die rechte Hosentasche gucken / schauen (koennen); mit dem rechten Auge in die linke Hosentasche gucken / schauen (koennen)');

ALTER TABLE `table1_myisam` ADD PRIMARY KEY (`id`);
ALTER TABLE `table1_myisam` ADD FULLTEXT KEY `ind_row1` (`row1`);

1 个答案:

答案 0 :(得分:0)

您将需要升级到更高版本的MySQL或MariaDB。在FTS方面,InnoDB 5.6在与MyISAM的功能对等方面仍然落后。

相关问题