Полнотекстовый поиск по массиву строк - PullRequest
4 голосов
/ 05 июня 2010

У меня есть массив строк PHP: например: "Большая зеленая машина, припаркованная снаружи" .. и т. Д.

Я хотел бы выполнить логические операции поиска над этими строками, аналогично полнотекстовому поиску MySQL или поиску по Сфинксу.

Например, я хотел бы найти все строки, содержащие слово «зеленый», но не «car»

Кто-нибудь знает какие-либо существующие классы или библиотеки PHP, которые бы помогли мне это сделать?Или кто-нибудь может предложить какие-либо термины Google, которые я мог бы найти?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 05 июня 2010

Функция PHP array_filter() поможет вам.

function greennotcar($v)
{
    if(strpos($v, " green ") === false)
        return false
    if(strpos($v, " car ") !== false)
        return false
    return true
}

$newarray = array_filter($array, "greennotcar");

Это проверяет, содержит ли строка green, если нет, исключает ее из массива. Затем он проверяет, содержит ли он car, и исключает ли он. В противном случае, включите его.

РЕДАКТИРОВАТЬ: я добавил пробелы в строках, чтобы вы не соответствовали, например, тележке и машине. Это все на ваше усмотрение.

1 голос
/ 06 июня 2010

Я не знаю ни одного существующего автономного решения, которое могло бы работать напрямую с переменными. Вы можете написать свою собственную реализацию, используя PCRE , str_word_count и другие функции строк / массивов. Ресурсы есть. Вдохновение может также прийти от подходов, используемых в некоторых приложениях с открытым исходным кодом, таких как полнотекстовый поиск Dokuwiki .

Более мощное решение (включая процесс индексации) может быть Zend_Search_Lucene :

Zend_Search_Lucene является общим целевая система поиска текста написана полностью в PHP 5. Так как он хранит его индекс на файловой системе и не требуется сервер базы данных, он может добавить возможности поиска практически для любого PHP-управляемый сайт. Zend_Search_Lucene поддерживает следующие функции:

  • Ранжированный поиск - лучшие результаты возвращаются первыми
  • Множество мощных типов запросов: запросы фраз, логические запросы, запросы с подстановочными знаками, запросы о близости, диапазонные запросы и многие другие.
  • Поиск по определенному полю (например, название, автор, содержание)
1 голос
/ 05 июня 2010

двойной preg_match() функция может помочь вам?

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