Как искать подстроку в столбце индекса полного текста? - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу найти подстроку в моем столбце полнотекстового индекса.

Моя таблица выглядит так: 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;

Предположим, что пример данных:

enter image description here

Некоторые случаи, которые я наблюдал:

Случай 1: Когда я использовал этот шаблон в своем запросе МАТЧ (данные) ПРОТИВ ('xy *' В БУЛЕВОМ РЕЖИМЕ) возврат 1 строки

Случай 2: Когда я использовал этот шаблон в своем запросе МАТЧ (данные) ПРОТИВ ('zy *' В БУЛЕВОМ РЕЖИМЕ) возврат 2 строки

Случай 3: Когда я использовал этот шаблон в моем запросе МАТЧ (данные) ПРОТИВ ('* y *' В БУЛЕВОМ РЕЖИМЕ) тогда строк нет вернулся, но я ожидал, что он вернет обе строки.

Я думаю, использовал (*) в качестве префикса, он не работает.

Пожалуйста, помогите мне найти решение этой проблемы.

заранее спасибо

1 Ответ

0 голосов
/ 16 ноября 2018

Это правильное поведение.Из руководства :

Звездочка служит оператором усечения (или подстановочного знака).В отличие от других операторов, он добавляется к слову, которое будет затронуто.Слова совпадают, если они начинаются со слова, предшествующего оператору *.

Другими словами, * можно использовать только в конце слова, как в первых двух случаях (xy*и zy*).Если вы хотите использовать сопоставление с подстановочными знаками на обоих концах слова, вам нужно будет использовать LIKE или, возможно, RLIKE, например,

WHERE data LIKE '%y%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...