Я хочу найти подстроку в моем столбце полнотекстового индекса.
Моя таблица выглядит так: child_table
clustering_key int(10) unsigned NOT NULL AUTO_INCREMENT,
Parent_id char(36) NOT NULL DEFAULT '',
child_id char(36) NOT NULL DEFAULT '',
data text,
PRIMARY KEY (clustering_key),
UNIQUE KEY child_index (child_id) USING BTREE,
FULLTEXT KEY data_index (data),
CONSTRAINT FK_child_table_parent_table FOREIGN KEY (Parent_id) REFERENCES parent_table (id) ON DELETE CASCADE ON UPDATE CASCADE )
ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8;
Предположим, что пример данных:
Некоторые случаи, которые я наблюдал:
Случай 1: Когда я использовал этот шаблон в моем запросе, MATCH (данные) ПРОТИВ ('xy *' В БУЛЕВОМ РЕЖИМЕ) возвращают 1 строку
Случай 2: Когда я использовал этот шаблон в моем запросе, MATCH (данные) ПРОТИВ ('zy *' В БУЛЕВОМ РЕЖИМЕ) возвращают 2 строки
Случай 3: Когда я использовал этот шаблон в моем запросе MATCH (data) AGAINST ('* y *' IN BOOLEAN MODE), строки не возвращались, но я ожидал, что он возвратит обе строки.
Я думаю, что используется (*) в качестве префикса его не работает.
Пожалуйста, помогите мне найти решение этой проблемы.
заранее спасибо
Это правильное поведение. Из руководства:
Звездочка служит оператором усечения (или подстановочного знака). В отличие от других операторов, он добавляется к слову, которое будет затронуто. Слова совпадают, если они начинаются со слова, предшествующего оператору *.
Другими словами, *
можно использовать только в конце слова, как в первых двух случаях (xy*
и zy*
). Если вы хотите использовать сопоставление с подстановочными знаками на обоих концах слова, вам нужно будет использовать LIKE
или, возможно, RLIKE
например
WHERE data LIKE '%y%'