• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نحوه نوشتن سیستم جستجو
#1
سلام دوستان،

برای یک سیستم چطور میشه یک جستجو قوی نوشت؟ اگه هم بشه یک جستجو ساده و پیشرفته نوشت چه بهتر!

مرسی Heart
غایب
  پاسخ
تشکر شده توسط :
#2
با Full text search engine ماله mysql که البته فعلا در این مورد ضعیف عمل کرده. البته الگوریتم‌های جستجویی هم وجود داره
سیستم های بازمتن جستجویی مثل Lucene هم وجود دارن که بر اساس فایل کار می کنن
  پاسخ
تشکر شده توسط :
#3
یک اسکریپت جستجو خوب سراغ ندارید؟
غایب
  پاسخ
تشکر شده توسط :
#4
علیرضا جان اگه شی گرا کار میکنی این دو کلاس نسبتا خوب هستند:

کد پی‌اچ‌پی:
<?
#############################################################
class MysqlSearch
{
    function find($keywords)
    {
        # Create a keywords array
        $keywords_array = explode(" ",$keywords);

        # Select data query
        if(!$this->searchcolumns)
        {
            $this->searchcolumns = "*";
            $search_data_sql = "SELECT ".$this->searchcolumns." FROM ".$this->table;
        }
        else
        {
            $search_data_sql = "SELECT ".$this->entry_identifier.",".$this->searchcolumns." FROM ".$this->table;
        }

        # Run query, assigning ref
        $search_data_ref = mysql_query($search_data_sql);

        # Define $search_results_array, ready for population
        # with refined results
        $search_results_array = array();

        if($search_data_ref)
        {
            while($all_data_array = mysql_fetch_array($search_data_ref))
            {
                # Get an entry indentifier
                $my_ident = $all_data_array[$this->entry_identifier];

                # Cycle each value in the product entry
                foreach($all_data_array as $entry_key=>$entry_value)
                {
                    # Cycle each keyword in the keywords_array
                    foreach($keywords_array as $keyword)
                    {
                        # If the keyword exists...
                        if($keyword)
                        {
                            # Check if the entry_value contains the keyword
    
                            if(stristr($entry_value,$keyword))
                            {
                                # If it does, increment the keywords_found_[keyword] array value
                                # This array can also be used for relevence results
                                $keywords_found_array[$keyword]++;
                            }
                        }
                        else
                        {
                            # This is a fix for when a user enters a keyword with a space
                            # after it.  The trailing space will cause a NULL value to
                            # be entered into the array and will not be found.  If there
                            # is a NULL value, we increment the keywords_found value anyway.
                            $keywords_found_array[$keyword]++;
                        }
                        unset($keyword);
                    }
    
                    # Now we compare the value of $keywords_found against
                    # the number of elements in the keywords array.
                    # If the values do not match, then the entry does not
                    # contain all keywords so do not show it.
                    if(sizeof($keywords_found_array) == sizeof($keywords_array))
                    {
                        # If the entry contains the keywords, push the identifier onto an
                        # results array, then break out of the loop.  We're not searching for relevence,
                        # only the existence of the keywords, therefore we no longer need to continue searching
                        array_push($search_results_array,"$my_ident");
                        break;
                    }
                }
                unset($keywords_found_array);
                unset($entry_key);
                unset($entry_value);
            }
        }

        $this->numresults = sizeof($search_results_array);
        # Return the results array
        return $search_results_array;
    }
    
    function setidentifier($entry_identifier)
    {
        # Set the db entry identifier
        # This is the column that the user wants returned in
        # their results array.  Generally this should be the
        # primary key of the table.
        $this->entry_identifier = $entry_identifier;
    }

    function settable($table)
    {
        # Set which table we are searching
        $this->table = $table;
    }
    
    function setsearchcolumns($columns)
    {
        $this->searchcolumns = $columns;
    }
}

?>

اینم دومی که کاملتره:
دانلود
در بين تمامي مردم تنها عقل است كه به عدالت تقسيم شده زيرا همه فكر مي‌كنند به اندازه كافي عاقلند!!!
  پاسخ
تشکر شده توسط : cyletech
#5
ممنونم مرتضی جون. ولی من با اینکه یکبار آموزش کامل php رو تموم کردم، دوباره دارم شروع می کنم و مرور می کنم. (این کتاب الکترونیکی حدود 190 صفحه هست!) - راستش خسته شدم و دوست دارم خودم بنویسم و از اینکه از کدهای آماده استفاده کنم بدم میاد. ولی انگار باید تابع های جستجو رو یاد بگیرم.
جایی سراغ ندارید که تمام توابع جستجو و کلمات کلیدی رو با توضیحشون داده باشه؟
غایب
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان