Создание индекса для поиска по PHP - PullRequest
3 голосов
/ 22 августа 2009

Как вы можете искать только уникальные слова с помощью PHP , чтобы я мог изучить основы при поиске?

У меня было несколько проблем при создании многомерного массива для вопросов.

Моя первая неудачная попытка выглядит следующим образом.

# 1

$result = pg_query_params ( $dbconn, 
    "SELECT question_id, body
    FROM questions",
    array () 
);

while ( $row = pg_fetch_array ( $result ) ) {
    $question_body [ $row['question_id'] ] ['body'] = $row['body'];
    $question_index = explode ( " ", $question_body[ $row['question_id'] ] ['body'] ); 
    $question_index = array_unique ( $question_index ); 
}                                                                                                   
var_dump( $question_index ); 

Проблема с этим кодом состоит в том, что он объединяет слова в каждом вопросе. Кажется, я не могу использовать explode, поскольку он, похоже, создает только одномерный массив.

Я также запускаю следующий код, пытаясь безуспешно получить question_id .

# 2

while ( $row = pg_fetch_array ( $result ) ) {
    $question_body [ $row['question_id'] ] ['body'] = $row['body'];
    $question_index[ $row['question_id'] ] = explode ( " ", $question_body[ $row['question_id'] ] ['body'] );
    $question_index[ $row['question_id'] ]= array_unique ( $question_index );
}
var_dump( $question_index );

Ответы [ 4 ]

3 голосов
/ 22 августа 2009

Сделайте себе одолжение и взгляните на Zend_Search_Lucene .

2 голосов
/ 22 августа 2009

Было бы неплохо сначала извлечь весь текстовый контент (без разметки) со страниц с помощью анализатора DOM Смотрите это:

Как можно реализовать прямой индекс в PHP?

2 голосов
/ 22 августа 2009

Обратите внимание, что str_replace может принимать массив значений в качестве стрелки. Например,

$body = str_replace(array(',', '.'), '', $body);

заменяет любой экземпляр элемента в массиве пустой строкой.

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

0 голосов
/ 25 августа 2009

Я наконец решил использовать команды Postgres, такие как LIKE для поиска. Мне было гораздо проще манипулировать данными в БД, чем в PHP.

...