Создание полезного поиска для фильтрации - PullRequest
0 голосов
/ 27 июня 2018

Я не очень хорошо разбираюсь в проблеме поиска. Я действительно использовал только SQL с подобными запросами и т. Д.

Мне нужно создать поиск для фильтрации файлов и продуктов. Итак, учитывая имя файла: company_launch 2019.png

Если вы начали поиск по любому из приведенных ниже пунктов, как и следовало ожидать, этот файл будет возвращен:

  • ком
  • 2019
  • запуск
  • Ланч
  • _launch
  • .png

и т.д. * * тысяча двадцать-одна

Это для php-сайта laravel. Я посмотрел на https://github.com/teamtnt/tntsearch, однако я не мог получить, чтобы это совпадало лучше, чем точное слово / слово минус несколько символов. Также было больше крайних случаев, которые означали, что ожидаемое выше поведение не сработало

Я сейчас смотрю на упругий поиск . У меня есть общее представление о понятии нграмм и о том, как это относится к поиску части слова, однако я не уверен, достаточно ли этого + нечеткого совпадения для этого поиска. Пока я могу получить только точные совпадения, как и раньше.

Может ли кто-нибудь помочь мне направить меня в правильном направлении, чтобы выполнить поиск, который соответствует ожиданиям?

1 Ответ

0 голосов
/ 29 июня 2018

TNTSearch имеет приятную функцию для достижения функциональности, подобной панели поиска в возвышенном тексте. Установив пакет, вы сразу получите доступ к функции fuzzyMatchFromFile.

Давайте рассмотрим случай, когда у вас есть куча изображений, расположенных в одной папке, и вы хотите добавить функцию поиска.

Во-первых, вы должны сохранить список каталогов в файл. Это можно сделать с помощью простой команды, например:

find ./path/to/image/folder -type f -follow -print > image-files.txt

В image-files.txt каждое изображение будет в отдельной строке

Далее вы предоставите этот файл в качестве второго аргумента функции fuzzyMatchFromFile

$query = "someword";
$path = "/path/to/image-files.txt";
$searchResults = fuzzyMatchFromFile($query, $path);

Массив $searchResults будет содержать путь к файлу вместе со счетом

Если у вас есть файл с именем beautiful-image.png, вы сможете искать и находить его также с помощью btfl-img.png.

Вышеописанное будет работать очень быстро для записей до 100 тыс.

Алгоритм проверяет, существует ли общая подпоследовательность между запросом и именем файла, и если это так, он вычисляет косинусное сходство между двумя векторами (оба имени файла и строки запроса преобразуются к вектору). Также, если подстрока существует, это увеличивает счет

...