2016-12-30 42 views
0

我有一個表與文章和表與類別。每個類別都有一些關鍵字,我希望使用這些關鍵字來確定一篇文章是否屬於某個類別。匹配的查詢不工作 - 不正確的參數

我使用下面的查詢:

SELECT 
    path, 
    title, 
    description, 
    keywords 
FROM 
    (
    SELECT 
    path, 
    keywords, 
    (select title from article where id = 164016) as title, 
    (select description from article where id = 164016) as description 
    FROM 
    categories c 
) as x 
WHERE 
    MATCH (title, description) AGAINST ('my keywords' IN BOOLEAN MODE) 

出於某種原因,因爲不正確MATCH的PARAMATERS這查詢不工作,但我無法弄清楚它是什麼。

回答

0

使用boolean fulltext search可以在表達式上進行精確匹配。但是,這些搜索有一些限制,如上面鏈接的文檔所述:

雙引號(「)字符中包含的短語僅與包含短語的行相匹配,因爲它是鍵入的。 全文引擎將短語拆分成單詞並執行的話全文索引搜索非詞的字符不需要精確匹配:短語搜索只要求符合包含完全相同的單詞作爲短語和例如,「測試短語」匹配「test,phrase」

如果該短語不包含no那些在索引中的詞,結果是 爲空。由於 因素的組合,這些詞可能不在索引中: 因素:如果它們不存在於文本中,是停用詞,或者是短於索引詞的最小長度的 。

以上也意味着,如果你有比搜索表達式的最小長度短停止字或一個詞,那麼MySQL將不會返回任何匹配。

SELECT path, keywords, MATCH (c.keywords) AGAINST ('"Here is some text"' IN BOOLEAN MODE) as relevance 
FROM categories c 
WHERE MATCH (c.keywords) AGAINST ('"Here is some text"' IN BOOLEAN MODE) 

如果您想完全匹配,則無法使用全文搜索。您需要使用like運營商或=運營商。

UPDATE

  1. title在這種情況下是不具有一個全文索引計算字段。

  2. against()

需要一個要搜索的字符串,以及一個可選的修飾符,表示什麼類型的搜索來執行的。搜索字符串必須是查詢評估期間不變的字符串值。這就排除了,例如,一個表列,因爲它對每一行都不相同。

source

你必須在against()功能,這是不允許的字段名。

+0

謝謝你的回覆。我認爲我的目標不會與我以前的查詢一起工作。我想我應該交換標題和關鍵字,所以我做了一個新的查詢,這是給參數匹配上的錯誤。也許你知道什麼是錯的。 – MNL

+0

有什麼方法可以工作?我改變了比賽對標題+描述(描述是全文),但它仍然不起作用。 – MNL

+0

因爲我不知道你想達到什麼目的,所以我不能幫你重新查詢。我只能指出你的syntasx問題。 – Shadow