当执行全文搜索时,使MySQL InnoDB表像MyISAM一样按相关性排序。

问题描述 投票:0回答:1

我在MySQL 5.6.47-87.0-log中创建了一个表。db类型是MyISAM,内容是德语。我做了一个全文索引,以便能够进行这样的查询。

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

这很好用,但有个缺点。查询使用的是停词列表,这是英文的标准列表,但也有相关的词存在于德文中(okay, still, after, also, herein, brief, was, in, an, am)。我不可能在ft_stopword_file=""的模式下重新启动MySQL服务器,因为这是一个共享主机,我的供应商不支持它。

所以我试着把表改成InnoDB。这工作,但我没有看到任何排序的相关性。

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

下面是两个测试表的SQL语句。它们是完全一样的,但一个在InnoDB,另一个在MyISAM。搜索字符串 "nach dem Rechten sehen "完全存在(id 1606)。在MyIsam表中,这个条目排在第一位,但在InnoDB表中没有。有什么方法可以像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`);

mysql sorting full-text-search innodb
1个回答
0
投票

你需要升级到MySQL或MariaDB的后期版本。5.6中的InnoDB在功能上与MyISAM平起平坐的时候,在FTS方面还是差了不少。

© www.soinside.com 2019 - 2024. All rights reserved.