Полнотекстовый поиск, возвращающийся ко многим результатам

php mysql sql full-text-search

86 просмотра

2 ответа

Мне нужно искать текстовый столбец для вхождения определенных слов в столбце.

Например, в качестве примера содержимое столбца может выглядеть так:

КОМПЛЕКТ: ТИП СВАРОЧНОГО ФЛАНЕЦОВОГО УПРАВЛЕНИЯ, СОСТОЯЩИЙ ИЗ ДВУХ ФЛАНЦОВ С ВИНТОВЫМИ ВИНТАМИ, НО БЕЗ БОЛТОВ И ГАСКЕТОВ, С КЛАССОМ 600, ПОДНЯТЫМ ЛИЦОМ, СОЕДИНЕНИЕМ .312 В СТЕНЕ, МАТЕРИАЛ ПОДДЕРЖИВАЮЩИХСЯ НЕРЖАВЕЮЩИМИ СТАЛЬЯМИ 304 НЕРЖАВЕЮЩАЯ СТАЛЬ 2, СТАФ. -50-13 REV: 1

Теперь пользователю необходимо ввести в текстовое поле, например, следующее:

ASTM-A182 F304 СВАРНАЯ ШЕЯ

В настоящее время я использую этот код:

$sql = "SELECT * FROM commtable WHERE MATCH (ldisc) AGAINST ('" . $ldisc . "' IN NATURAL LANGUAGE MODE);";

Но большинство возвращаемых записей (возвращает сотни записей) не содержат все условия поиска, введенные в текстовое поле.

Как я могу точно настроить этот полнотекстовый поиск (или использовать другой метод), чтобы дать мне лучший результат более близко к тому, что было введено?

РЕДАКТИРОВАТЬ: Тип таблицы: введите описание изображения здесь

РЕДАКТИРОВАТЬ 2: Он работает сейчас, добавил этот код:

if ($ldisc != "") {

$parts = explode(" ", $ldisc);

$tempSQL = "SELECT * FROM commtable WHERE MATCH (ldisc) AGAINST (" . "'";

for ($i = 0; $i < count($parts); $i++) {
    $tempSQL = $tempSQL . '+' . $parts[$i] . ' ';
}

$tempSQL = $tempSQL . "' IN BOOLEAN MODE);";

$sql = $tempSQL;
$result = mysqli_query($con, $sql);
}

И изменил минимальную длину слова на 1.

Автор: Letholdrus Источник Размещён: 16.10.2019 12:13

Ответы (2)


2 плюса

Решение

Этот вопрос звучит примерно так, как вы ищете: полнотекстовый поиск MySQL - только результаты, содержащие все слова

NATURAL LANGUAGE MODEпо своей природе возвращает приблизительные совпадения. Чтобы соответствовать всем словам BOOLEAN MODE, вы должны добавить +перед каждым необходимым словом. Например,

MATCH (ldisc) AGAINST ('+ASTM-A182 +F304 +WELD +NECK' IN BOOLEAN MODE)

Вам придется разделить входную строку и добавить +знаки. Как это сделать, оставлено в качестве упражнения для программиста. знак равно

Автор: machine yearning Размещён: 26.01.2016 01:26

1 плюс

Измените его на логический режим

"SELECT * FROM commtable WHERE MATCH (ldisc) AGAINST ('" . $ldisc . "' IN BOOLEAN MODE);";

Другое дело, чтобы следить за ft_min_word_length

Автор: Mihai Размещён: 26.01.2016 01:20
Вопросы из категории :
32x32