2012-01-10 28 views
0

我想通過select body from articles結果集而不是database作爲AGAINST參數列表中的關鍵字。我怎樣才能做到這一點?。我想根據表中的匹配關鍵字找到相關的文章。如何在mySql中完整索引搜索內部傳遞select語句值?

SELECT * FROM articles 
    WHERE MATCH (title,body) 
    AGAINST ('database' IN NATURAL LANGUAGE MODE); 

我想要做這樣的:從comment

SELECT * FROM articles 
    WHERE MATCH (title,body) 
    AGAINST ("select title,body from articles" IN NATURAL LANGUAGE MODE); 

編輯:
我想獲得基於條通道的匹配關鍵字的密度相關文章。我創建了FULLTEXT索引,我的表格採用ISAM格式。目前文章頻道包含字幕和正文自定義字段。由於所有內容都必須是動態的,因此我無法將關鍵字傳遞給AGAINST('Lorem Manager'),因爲我們不知道在訪問下一篇新聞文章時關鍵字是什麼,因此我嵌入了選擇語句來提取標題和正文。我得到的結果,但不知何故我的停止關鍵字無法識別。

回答

1

你準備好了什麼?

爲了更好地理解— 或許說明 —你問什麼,讓我們討論的東西在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_4field_id_6)指定的列是相同的那些在文章表的FULLTEXT索引的定義命名。

如果您想單獨搜索,則需要爲每列創建單獨的FULLTEXT索引。


一些詞在全文搜索被忽略:

  • 任何字太短會被忽略。全文搜索找到的單詞的默認最小長度爲四個字符。
  • 停用詞列表中的詞將被忽略。停用詞是一個詞,例如「the」或「some」,它是如此常見以至於它被認爲具有零語義值。有一個內置的停用詞列表,但它可以被用戶定義的列表覆蓋。

默認停止詞列表可以在MySQL文檔的11.9.4. Full-Text Stopwords中查看。

+0

感謝rjb的詳細解釋。我想根據文章頻道中匹配關鍵字的密度來獲取相關文章。我創建了FULLTEXT索引,並且我的表格採用ISAM格式。目前文章頻道包含字幕和主體自定義字段。由於所有內容都必須是動態的,所以我無法將關鍵字傳遞給AGAINST('Lorem Manager'),因爲當我們訪問下一篇新聞文章時我們不知道關鍵詞是什麼,所以我嵌入了選擇語句來拉取標題和正文。我是得到的結果,但不知何故我的停止關鍵字無法識別。 – user1123399 2012-01-11 13:31:35