你準備好了什麼?
爲了更好地理解— 或許說明 —你問什麼,讓我們討論的東西在ExpressionEngine說法,畢竟這就是你標記你的問題。
使用敏捷記錄ExpressionEngine網站的主題,讓我們使用兩個字段從關於通道—身體和工作人員的標題:
身體
自定義字段:{about_body}
MySQL的色譜柱:field_id_4
員工標題
自定義字段:{about_staff_title}
MySQL的列:field_id_6
首先,如果你還沒有,你需要create a single FULLTEXT index包含所有您要搜索的列。
使用兩列從上面,從phpMyAdmin的或者你喜歡的MySQL GUI客戶端執行下面的SQL語句:
CREATE FULLTEXT INDEX related_articles
ON exp_channel_data (field_id_4, field_id_6);
可以驗證與以下查詢新創建的索引:
SHOW INDEX FROM exp_channel_data;
要針對文本集合(一個或多個數據庫列)執行字符串(關鍵字)的自然語言搜索,請考慮以下事項...其中的Lorem和經理是您的關鍵字:
SELECT * FROM exp_channel_data
WHERE MATCH (field_id_4, field_id_6)
AGAINST ('Lorem Manager' IN NATURAL LANGUAGE MODE);
這將返回設置像下面(簡化可讀性)結果:
+----------+-------------+------------------------+
| entry_id | field_id_4 | field_id_6 |
+----------+-------------+------------------------+
| 3 | Lorem ipsum | |
| 8 | | Product Manager |
| 4 | | Co-Owner/Label Manager |
+----------+-------------+------------------------+
當使用自然語言全文搜索,需要在MATCH()函數中命名的列是包含在表中某些FULLTEXT索引中的相同列。
例如,在前面的例子中注意到,在MATCH()函數(field_id_4和field_id_6)指定的列是相同的那些在文章表的FULLTEXT索引的定義命名。
如果您想單獨搜索列,則需要爲每列創建單獨的FULLTEXT索引。
一些詞在全文搜索被忽略:
- 任何字太短會被忽略。全文搜索找到的單詞的默認最小長度爲四個字符。
- 停用詞列表中的詞將被忽略。停用詞是一個詞,例如「the」或「some」,它是如此常見以至於它被認爲具有零語義值。有一個內置的停用詞列表,但它可以被用戶定義的列表覆蓋。
默認停止詞列表可以在MySQL文檔的11.9.4. Full-Text Stopwords中查看。
來源
2012-01-10 21:02:37
rjb
感謝rjb的詳細解釋。我想根據文章頻道中匹配關鍵字的密度來獲取相關文章。我創建了FULLTEXT索引,並且我的表格採用ISAM格式。目前文章頻道包含字幕和主體自定義字段。由於所有內容都必須是動態的,所以我無法將關鍵字傳遞給AGAINST('Lorem Manager'),因爲當我們訪問下一篇新聞文章時我們不知道關鍵詞是什麼,所以我嵌入了選擇語句來拉取標題和正文。我是得到的結果,但不知何故我的停止關鍵字無法識別。 – user1123399 2012-01-11 13:31:35