Как искать подстроку в столбце индекса полного текста?

0

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

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

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

Изображение 174551

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

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

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

Случай 3: Когда я использовал этот шаблон в моем запросе MATCH (data) AGAINST ('* y *' IN BOOLEAN MODE), строки не возвращались, но я ожидал, что он возвратит обе строки.

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

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

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

Теги:
database

1 ответ

0

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

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

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

WHERE data LIKE '%y%'
  • 0
    Привет @ Ник, я использую FullText Index для столбца, чтобы избежать сканирования всех строк. Когда я использовал LIKE, тогда этот запрос сканировал все строки.
  • 1
    @Shubham, к сожалению, это правда. Но индекс в любом случае не может работать с подстановочным знаком в начале строки.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню