MySql fulltext search in PHP using string containing keywords

前端 未结 1 1603
抹茶落季
抹茶落季 2020-12-14 13:23

I have a string that contains some keywords like this $string = \'one, two, \"phrase three words\"\' I am trying to do a full-text search using:



        
相关标签:
1条回答
  • 2020-12-14 13:45

    As MySQL manual says:

    A phrase that is enclosed within double quote (“"”) characters matches only rows that contain the phrase literally, as it was typed.

    Let's look at the example table:

    mysql> select * from articles;
    +----+-----------------------+------------------------------------------+
    | id | title                 | body                                     |
    +----+-----------------------+------------------------------------------+
    |  1 | PostgreSQL Tutorial   | DBMS stands for DataBase ...             |
    |  2 | How To Use MySQL Well | After you went through a ...             |
    |  3 | Optimizing MySQL      | In this tutorial we will show ...        |
    |  4 | 1001 MySQL Tricks     | 1. Never run mysqld as root. 2. ...      |
    |  5 | MySQL vs. YourSQL     | In the following database comparison ... |
    |  6 | MySQL Security        | When configured properly, MySQL ...      |
    +----+-----------------------+------------------------------------------+
    
    mysql> SELECT * FROM articles WHERE MATCH (title,body)
         AGAINST ('"database comparison"' IN BOOLEAN MODE);
    
    +----+-------------------+------------------------------------------+
    | id | title             | body                                     |
    +----+-------------------+------------------------------------------+
    |  5 | MySQL vs. YourSQL | In the following database comparison ... |
    +----+-------------------+------------------------------------------+
    

    Order matters, when the words are quoted:

    mysql> SELECT * FROM articles WHERE MATCH (title,body)
         AGAINST ('"comparison database"' IN BOOLEAN MODE);
    
    Empty set (0.01 sec)
    

    When we remove the quotes, it will search for rows, containing words "database" or "comparison":

    mysql> SELECT * FROM articles WHERE MATCH (title,body)
         AGAINST ('database comparison' IN BOOLEAN MODE);
    
    +----+---------------------+------------------------------------------+
    | id | title               | body                                     |
    +----+---------------------+------------------------------------------+
    |  1 | PostgreSQL Tutorial | DBMS stands for DataBase ...             |
    |  5 | MySQL vs. YourSQL   | In the following database comparison ... |
    +----+---------------------+------------------------------------------+
    

    Order doesn't matter now:

    mysql> SELECT * FROM articles WHERE MATCH (title,body)
         AGAINST ('comparison database' IN BOOLEAN MODE);
    
    +----+---------------------+------------------------------------------+
    | id | title               | body                                     |
    +----+---------------------+------------------------------------------+
    |  1 | PostgreSQL Tutorial | DBMS stands for DataBase ...             |
    |  5 | MySQL vs. YourSQL   | In the following database comparison ... |
    +----+---------------------+------------------------------------------+
    

    If we want to get rows, containing either word "PostgreSQL" or phrase "database comparison", we should use this request:

    mysql> SELECT * FROM articles WHERE MATCH (title,body)
         AGAINST ('PostgreSQL "database comparison"' IN BOOLEAN MODE);
    
    +----+---------------------+------------------------------------------+
    | id | title               | body                                     |
    +----+---------------------+------------------------------------------+
    |  1 | PostgreSQL Tutorial | DBMS stands for DataBase ...             |
    |  5 | MySQL vs. YourSQL   | In the following database comparison ... |
    +----+---------------------+------------------------------------------+
    

    fiddle

    Make sure, that the words, you are searching for, are not in the list of stopwords, that are ignored.

    0 讨论(0)
提交回复
热议问题