Я пытаюсь использовать FTS MySQL для поиска по проиндексированному контенту для поиска определенных ключевых слов. Для того, что я пытаюсь сделать, ему нужно одно или несколько ключевых слов в тексте, а ключевые слова должны быть точно совпадают. Однако не имеет значения, находится ли ключевое слово в середине другого слова, например, при поиске «STACK» оно должно совпадать:
Я использовал следующий метод:
SELECT ... FROM ... WHERE text LIKE '%keyword1%' OR LIKE '%keyword2%' OR LIKE '%keyword3%'
Это вернет любой текст, который будет содержать любое из ключевых слов. Тем не менее, это начало тормозить почти все, потому что большая часть индексированного контента большая (хранится в BLOB-объектах), и у меня есть более 500 таких строк для индексации. Поскольку Like не использует индексирование с помощью этого метода, я попытался преобразовать его в FTS, используя следующее:
SELECT ... FROM ... WHERE MATCH(text) AGAINST ('+keyword1 +keyword2 +keyword3' IN BOOLEAN MODE)
Это работало хорошо с отдельными ключевыми словами, но при вводе нескольких ключевых слов это не удается, потому что FTS с операндом + НУЖНО найти совпадение с заданными словами. Но без этих ключевых слов FTS сопоставляет нечеткие результаты, а не точные результаты. Я получаю пропущенный контент, который наиболее точно содержит ключевые слова.
Что я могу использовать, чтобы получить весь контент, который содержит одно или несколько ключевых слов axact?
попробуйте что-то вроде этого:
SELECT * FROM table MATCH (text) AGAINST ('+"keyword1" +"keyword2"' IN BOOLEAN MODE)
Похоже, вы ищете что-то вроде следующего:
SELECT ... FROM ...
WHERE MATCH(text) AGAINST ('+keyword1' IN BOOLEAN MODE)
OR MATCH(text) AGAINST ('+keyword2' IN BOOLEAN MODE)
OR MATCH(text) AGAINST ('+keyword3' IN BOOLEAN MODE)