簡體   English   中英

PHP/MySQL:匹配/反對 escaping 停用詞

[英]PHP/MySQL: match / against escaping stopword

這是我的查詢:

SELECT * from description WHERE (match(description) AGAINST ( '+will +smith' in boolean mode)) 

我知道will是一個停用詞,這就是為什么我得到一個空的結果。 如果我仍然可以在這個查詢中使用這兩個詞,它會如何工作? 我需要以某種方式逃避它嗎?

對於給定的搜索,沒有辦法“轉義”停用詞。 可以這樣想:創建全文索引時,如果它們是停用詞,它會跳過索引詞。 即,單詞不存儲在全文索引中。 因此,您不能隨后在給定搜索中轉義該單詞,並讓一個單詞神奇地出現在全文索引中,因為創建索引時未包含該單詞。

假設您在 InnoDB 中使用全文搜索,解決方案顯然是定義您自己的存儲停用詞的表。 然后您可以將一組自定義的單詞放入表中,並使用配置變量innodb_ft_server_stopword_table使您的 MySQL 實例在創建全文索引之前使用您的自定義表。 這樣,您想要索引的單詞將在構建全文索引時包含在內。

請參閱https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html

但這是一個全局變量,因此它將影響該 MySQL 實例上所有表的所有全文索引創建。 我想您可以將innodb_ft_server_stopword_table設置為您的自定義表,構建您的全文索引,然后將選項設置回其通常值。 但這會很棘手,因為無論何時重建全文索引(例如在更改表或優化表期間),它都會恢復為默認停用詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM