Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

pencocokan pencarian php (fuzzy)

Sayangnya, melakukan ini di PHP sangat mahal (penggunaan CPU dan memori tinggi.) Namun, Anda pasti dapat menerapkan algoritme ke kumpulan data kecil.

Untuk memperluas secara khusus bagaimana Anda dapat membuat kehancuran server:beberapa fungsi PHP bawaan akan menentukan "jarak" antara string:levenshtein dan teks_serupa .

Data dummy:(berpura-pura menjadi berita utama)

$titles = <<< EOF
Apple
Apples
Orange
Oranges
Banana
EOF;

$titles = explode("\n", $titles );

Pada titik ini, $titles seharusnya hanya berupa array string. Sekarang, buat matriks dan bandingkan setiap judul dengan SETIAP judul lainnya untuk kesamaan. Dengan kata lain, untuk 5 headline, Anda akan mendapatkan matriks 5 x 5 (25 entri.) Di situlah CPU dan memory sink masuk.

Itu sebabnya metode ini (melalui PHP) tidak dapat diterapkan ke ribuan entri. Tetapi jika Anda ingin:

$matches = array();
foreach( $titles as $title ) {
    $matches[$title] = array();
    foreach( $titles as $compare_to ) {
        $matches[$title][$compare_to] = levenshtein( $compare_to, $title );
    }
    asort( $matches[$title], SORT_NUMERIC  );
}

Pada titik ini apa yang pada dasarnya Anda miliki adalah matriks dengan "jarak teks." Dalam konsep (bukan dalam data nyata) terlihat seperti tabel di bawah ini. Perhatikan bagaimana ada sekumpulan nilai 0 yang berjalan secara diagonal - itu berarti bahwa dalam loop yang cocok, dua kata yang identik -- yah, identik.

       Apple Apples Orange Oranges Banana
Apple    0     1      5      6       6
Apples   1     0      6      5       6
Orange   5     6      0      1       5
Oranges  6     5      1      0       5
Banana   6     6      5      5       0

Array $matches yang sebenarnya terlihat seperti ini (terpotong):

Array
(
    [Apple] => Array
        (
            [Apple] => 0
            [Apples] => 1
            [Orange] => 5
            [Banana] => 6
            [Oranges] => 6
        )

    [Apples] => Array
        (
      ...

Bagaimanapun, terserah Anda untuk (dengan eksperimen) menentukan apa yang paling cocok dengan cutoff jarak numerik yang baik - dan kemudian menerapkannya. Jika tidak, bacalah di sphinx-search dan gunakan - karena ia memiliki pustaka PHP.

Oranye Anda senang Anda bertanya tentang ini?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konfigurasi MySQL yang benar untuk file Ruby on Rails Database.yml

  2. Bagaimana cara membuat kunci utama mulai dari 1000?

  3. php membaca bidang bit mysql mengembalikan karakter aneh

  4. Jajak pendapat lama dalam obrolan Laravel:Mengapa div tidak memperbarui dirinya sendiri?

  5. Memilih entri berdasarkan tanggal ->=SEKARANG(), MySQL