Sfenks PHP arama

1 Cevap php

Ben bir Sfenks arama yapıyor ama gerçekten garip sonuçlarını dönüyorum. Herhangi bir yardım takdir edilmektedir.

Ben "50" yazarsanız Yani, örneğin, alıyorum:

  • 50 Cent
  • 50 Aslanlar
  • 50 Ayak Dalga, vb

Bu harika, ama ben "50 Ce" arama yaparken, ben alıyorum:

  • Ryczące Dwudziestki
  • Spisek
  • Bernhard Gal
  • Kavabanga Go-Go

Ve diğer deli sonuçları. Ben "50 Cent" için arama Ayrıca, doğru sonuç üstünde olduğunu, ancak daha sonra rastgele sonuçlar aşağıda. Herhangi bir fikir neden?

PHP kodu:

$query = $_GET['query'];

if (!empty($query))
{
 $sphinx->SetMatchMode(SPH_MATCH_ALL);
 $sphinx->AddQuery($query, 'artists');
 $sphinx->AddQuery($query, 'variations');

 $sphinx->SetFilter('name', array(3));

 $sphinx->SetLimits(0, 10);

 $result = $sphinx->RunQueries();

 echo '<pre>';

 switch ($result)
 {
  case false:
   echo 'Query failed: ' . $sphinx->GetLastError() . "\n";
   break;
  default:
   if ($sphinx->GetLastWarning())
   {
    echo 'WARNING: ' . $sphinx->GetLastWarning() . "\n";
   }

   if (is_array($result[0]['matches']) && count($result[0]['matches']))
   {
    foreach ($result[0]['matches'] as $value => $info)
    {
     $artist = artistDetails($value);
     echo $artist['name'] . "\n";
    }
   }
 }
}

Sfenks Endeks ve Kaynak:

source artists
{
 type     = mysql

 sql_host    = localhost
 sql_user    = user
 sql_pass    = pass
 sql_db     = db
 sql_port    = 3300

 sql_query    = \
  SELECT \
    id, name \
  FROM artists;

 #UNIX_TIMESTAMP(time)
 #sql_attr_uint   = group_id
 #sql_attr_timestamp  = time

 sql_query_info   = SELECT id,name FROM artists WHERE id=$id
}

index artists
{
 source     = artists
 path     = /var/sphinx/artists
 docinfo     = extern
 charset_type   = utf-8
}

1 Cevap

Eğer kısmi kelimeleri indeksi ve maç için istediğiniz sfenks anlatmak için min_prefix_len indeks yapılandırma seçeneğini kullanmanız gerekir. Muhtemelen de 1 enable_star ayarlamanız gerekir

http://www.sphinxsearch.com/docs/current.html#conf-min-prefix-len

index artists
{
 source     = artists
 path     = /var/sphinx/artists
 docinfo     = extern
 charset_type   = utf-8
 min_prefix_len   = 2
 enable_star   = 1
}

önek indeksleme sağlayan sonra kısmi kelime sonuç almak için "50 Ce *" gibi şeyler aramak mümkün olacak. İsterseniz kısmi kelime muhtemelen sfenks geçirmeden önce programlı arama dizesini değiştirmeniz gerekecek * kendilerini ekleme hakkında bilmek için kullanıcıların gerektirmeden izin maçları.