2013-08-30 2 views
1

В настоящее время я пытаюсь создать функцию поиска для своего сайта, которая позволит пользователям искать других пользователей, используя их полное имя (первое или последнее) или их имя пользователя. Прямо сейчас я создал временный поиск, в котором используется функция LIKE mysql и% name%, чтобы разрешить использование wild cards. Это очень просто. У меня возникают проблемы с поиском имен, когда предоставляется полное имя, и только сокращенная версия имени находится в базе данных. Например:php mysql search engine

Поиск Ричард только придумает Ричардса, а не Richs. Я очень зациклен на том, как создать что-то, что сделает это, не будучи очень неэффективным. Я собирался использовать SOUNDEX, но это было бы полезно только для английских имен и слов.

Также я хотел спросить, есть ли у него лучшая идея использовать поисковую систему, такую ​​как Apaches Lucene, для индексации баз данных? Я рассматривал это, но не был уверен, что это будет стоить того, поскольку поисковая система будет искать только мелкие полные текстовые строки.

Спасибо

+2

Попробуйте использовать фильтр 'levensthein' http://stackoverflow.com/questions/4671378/levenshtein-mysql-php – elclanrs

+0

Кажется, это лучший способ пойти, но лучший ли он для больших баз данных? Как только информация будет возвращена в базу данных, я буду искать ее в списке более миллиона пользователей. – tiantang

ответ

0

Использование Approximate string matching для ранжирования результатов и отображения всех результатов в пределах заданного порога.

Вы можете начать с levenshtein, как указано в комментариях, и вернуть самые низкие баллы. Левенштейн вычисляет разницу, поэтому низкий балл означает высокое сходство. Счет 0 означает точное совпадение.

+0

Как я могу установить levenshtein в mysql? –

-2

Вы можете попробовать следующее:

search.html

<html> 
    <head> 
     <title>Search the Database</title> 
    </head> 

    <body> 

    <form action="/test/search.php" method="post"> 
    Search: <input type="text" name="term" /><br /> 
    <input type="submit" name="submit" value="Submit" /> 
    </form> 

    </body> 
</html> 

search.php

<?php 
mysql_connect ("localhost", "username","password") or die (mysql_error()); 
mysql_select_db ("database"); 

$term = $_POST['term']; 

$sql = mysql_query("select * from database where XXXXXX like '%$term%'"); 

while ($row = mysql_fetch_array($sql)){ 
    echo 'ID: '.$row['XXXXX']; 
    echo '<br/> First Name: '.$row['XXXX']; 
    echo '<br/> Last Name: '.$row['XXXX']; 
    echo '<br/> Phone: '.$row['XXXX']; 
    echo '<br/><br/>'; 
    } 

?> 
+0

Это в основном то, что у меня есть, кроме использования PDO, а что нет. Но если я введу полное имя, он не будет иметь сокращенных имен. IE Richard => Ричард, Rich => Ричард, Rich – tiantang

0

Если вы указали полное имя, вам сначала нужно разделить имена с PHP взорваться в соответствии с пробелами.
Затем вам нужно взять имя и разбить его в соответствии с количеством символов, которое вы хотите. например. , если у вас есть Антонио, разделение до 4 символов дает Анто.
Затем вы выполняете свою функцию поиска.

Вот как разделить на 4 символа:
$ str = "Antonia";
$ arr2 = str_split ($ str, 4);
echo $ arr2 [0];