mysql 相關搜尋 MySQL單詞搜尋相關度排名

2021-10-17 20:37:42 字數 4642 閱讀 1868

乙個單詞搜尋的相關度排名,這個例子演示了乙個單詞搜尋的相關度排名計算。

mysql> create table articles (

-> id int unsigned auto_increment not null primary key,

-> title varchar(200),

-> body text,

-> fulltext (title,body)

-> ) engine=innodb;

query ok, 0 rows affected (0.56 sec)

mysql> insert into articles (title,body) values

-> ('mysql tutorial','this database tutorial ...'),

-> ("how to use mysql",'after you went through a ...'),

-> ('optimizing your database','in this database tutorial ...'),

-> ('mysql vs. yoursql','when comparing databases ...'),

-> ('mysql security','when configured properly, mysql ...'),

-> ('database, database, database','database database database'),

-> ('1001 mysql tricks','1. never run mysqld as root. 2. ...'),

-> ('mysql full-text indexes', 'mysql fulltext indexes use a ..');

query ok, 8 rows affected (0.02 sec)

records: 8  duplicates: 0  warnings: 0

mysql> select id, title, body, match (title,body) against ('database' in boolean mode) as score from articles order by score desc;

| id | title                        | body                                | score               |

|  6 | database, database, database | database database database          |  1.0886961221694946 |

|  3 | optimizing your database     | in this database tutorial ...       | 0.36289870738983154 |

|  1 | mysql tutorial               | this database tutorial ...          | 0.18144935369491577 |

|  2 | how to use mysql             | after you went through a ...        |                   0 |

|  4 | mysql vs. yoursql            | when comparing databases ...        |                   0 |

|  5 | mysql security               | when configured properly, mysql ... |                   0 |

|  7 | 1001 mysql tricks            | 1. never run mysqld as root. 2. ... |                   0 |

|  8 | mysql full-text indexes      | mysql fulltext indexes use a ..     |                   0 |

8 rows in set (0.00 sec)

總共有8條記錄,其中3條與資料庫搜尋詞匹配。第一條記錄(id 6)包含搜尋詞6次,相關度排名為1.0886961221694946。這個排名值計算使用tf的價值6(資料庫搜尋詞出現6次記錄id 6)和idf值為0.42596873216370745,計算如下(8是記錄的總數和3是包含搜尋詞的記錄數量)

$ = log10( 8 / 3 ) = 0.42596873216370745

mysql> select log10( 8 / 3 ) ;

| log10( 8 / 3 )      |

| 0.42596873216370745 |

1 row in set (0.00 sec)

然後將tf和idf值輸入到排名公式中

$ = $ * $ * $

在mysql命令列客戶端執行計算將返回乙個排名值1.088696164686938。

mysql> select 6*log10(8/3)*log10(8/3);

| 6*log10(8/3)*log10(8/3) |

|       1.088696164686938 |

1 row in set (0.00 sec)

您可能會注意到select ... match ... against語句和mysql命令列客戶端所計算的排名值有差別(1.0886961221694946對1.088696164686938)。區別在於innodb內部是如何執行整數和浮點數/雙精度型別轉換的(以及相關的精度和四捨五的決定),以及它們在其他地方是如何執行的,比如在mysql命令列客戶端或其他型別的計算器中。

多詞搜尋的相關度排名

這個示例演示了基於前面示例中使用的articles表和資料計算多單詞全文搜尋的相關度排名。

如果你搜尋的是乙個以上的單詞,那麼相關度排名值就是每個單詞相關度排名值的總和,如下公式所示:

$ = $ * $ * $ + $ * $ * $

執行兩個搜尋詞('mysql tutorial')搜尋將返回以下結果:

mysql> select id, title, body, match (title,body) against ('mysql tutorial' in boolean mode) as score from articles order by score desc;

| id | title                        | body                                | score                |

|  1 | mysql tutorial               | this database tutorial ...          |   0.7405621409416199 |

|  3 | optimizing your database     | in this database tutorial ...       |   0.3624762296676636 |

|  5 | mysql security               | when configured properly, mysql ... | 0.031219376251101494 |

|  8 | mysql full-text indexes      | mysql fulltext indexes use a ..     | 0.031219376251101494 |

|  2 | how to use mysql             | after you went through a ...        | 0.015609688125550747 |

|  4 | mysql vs. yoursql            | when comparing databases ...        | 0.015609688125550747 |

|  7 | 1001 mysql tricks            | 1. never run mysqld as root. 2. ... | 0.015609688125550747 |

|  6 | database, database, database | database database database          |                    0 |

8 rows in set (0.00 sec)

在第一條記錄(id 1)中,「mysql」出現一次,「tutorial」出現兩次。「mysql」有六條匹配記錄,「tutorial」有兩條匹配記錄。當將這些值插入到用於多個單詞搜尋的排名公式中時,mysql命令列客戶端返回預期的排名值

mysql> select (1*log10(8/6)*log10(8/6)) + (2*log10(8/2)*log10(8/2));

| (1*log10(8/6)*log10(8/6)) + (2*log10(8/2)*log10(8/2)) |

|                                    0.7405621541938003 |

1 row in set (0.00 sec)

與單個單詞搜尋一樣,使用select ... match ... against語句和mysql命令列工具執行的結果有差別。

mysql相關函式 MySql 相關函式

select group concat column name from table name group by table name,table name2.field 函式自定義排序 select from user where type in 1,2,3 order by field colu...

mysql相關操作 mysql 相關操作

1 登入 mysql u root p 2 檢視當前有的資料庫 show databases 3 建立資料庫 create database 資料庫名 4 操作 使用 資料庫 use 資料庫名 5 檢視有哪些表 show tables 6 建立表 create table 表名 7 刪除表 drop...

mysql相關知識 MySQL相關知識

字串拼接 select from tablename where mydata like concat curdate limit 3 這裡concat是字串拼接,concat mys q l mysql 顯示日期不帶時間的函式,如 2015 05 14 curdate 是日期不算時間 2015 0...