"Jason Wong" <[EMAIL PROTECTED]> wrote in message
news:000301c1428d$f11b3a80$[EMAIL PROTECTED]...
> The obvious first thing to do is to screen your keywords. Do not search on
> common words such as:
>
> and, if, the, in etc.

An easy way to do this is to set up an array of words
to exclude.  Then you can parse your input string and
use array_diff() to return only the non-excluded words, ie

<?php
    // Assume we get $searchphrase from a form

    // Strip all non-alpha text from string;
    // anyone know a more convenient f'n for this?
    // NOTE: this list is quite incomplete.
    // NOTE: can also use this step to convert
    //   accented characters to their plain counterparts.
    $conv = array(
        "0" => "",
        "1" => "",
        "2" => "",
        "3" => "",
        "4" => "",
        "5" => "",
        "6" => "",
        "7" => "",
        "8" => "",
        "9" => "",
        "!" => "",
        "&" => "",
        "\n" => "",
        "\t" => "",
        "." => "",
        "<" => "",
        ">" => "",
        "\\" => "",
    );
    $searchphrase = strtr(strtolower($searchphrase), $conv)

    // Parse input string into an array of words
    $use = explode(" ", $searchphrase);

    // Add any other too-common words that occur to you.
    $excl = array(
        'i', 'you', 'he', 'she', 'it', 'am', 'is', 'be', 'are',
        'to', 'from', 'if', 'the', 'this', 'that', 'in', 'of', 'at',
        'a', 'an', 'and', 'or', 'not'
    );

    // Filter out too-common words
    $use = array_diff($use, $excl);

    if (count($use) == 0) {
        echo "No valid search terms";
        exit();
    }

    // The FALSE is a dummy term so I don't
    // have to muck about deciding whether an
    // OR is needed for each search term.
    $query = 'SELECT * FROM table WHERE FALSE';
    foreach($use as $term)
        $query .= " OR keywords LIKE '%$term%'";

?>



-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to