您好,登錄后才能下訂單哦!
mysql全文檢索怎么做?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
mysql做全文檢索的方法:
1、自然語言檢索:
IN NATURAL LANGUAGE MODE
2、布爾檢索:
IN BOOLEAN MODE
剔除一半匹配行以上都有的詞,譬如說,每個行都有this這個字的話,那用this去查時,會找不到任何結果,這在記錄條數特別多時很有用,
原因是數據庫認為把所有行都找出來是沒有意義的,這時,this幾乎被當作是stopword(中斷詞);但是若只有兩行記錄時,是啥鬼也查不出來的,
因為每個字都出現50%(或以上),要避免這種狀況,請用IN BOOLEAN MODE。
● IN BOOLEAN MODE的特色:
·不剔除50%以上符合的row。
·不自動以相關性反向排序。
·可以對沒有FULLTEXT index的字段進行搜尋,但會非常慢。
·限制最長與最短的字符串。
·套用Stopwords。
● 搜索語法規則:
+ 一定要有(不含有該關鍵詞的數據條均被忽略)。
- 不可以有(排除指定關鍵詞,含有該關鍵詞的均被忽略)。
> 提高該條匹配數據的權重值。
< 降低該條匹配數據的權重值。
~ 將其相關性由正轉負,表示擁有該字會降低相關性(但不像 - 將之排除),只是排在較后面權重值降低。
* 萬用字,不像其他語法放在前面,這個要接在字符串后面。
" " 用雙引號將一段句子包起來表示要完全相符,不可拆字。
SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple -banana' IN BOOLEAN MODE);
+ 表示AND,即必須包含。- 表示NOT,即必須不包含。即:返回記錄必需包含 apple,且不能包含 banner。
SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('apple banana' IN BOOLEAN MODE);
apple和banana之間是空格,空格表示OR。即:返回記錄至少包含apple、banana中的一個。
SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple banana' IN BOOLEAN MODE);
返回記錄必須包含apple,同時banana可包含也可不包含,若包含的話會獲得更高的權重。
SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple ~banana' IN BOOLEAN MODE);
~ 是我們熟悉的異或運算符。返回記錄必須包含apple,若也包含了banana會降低權重。
但是它沒有 +apple -banana 嚴格,因為后者如果包含banana壓根就不返回。
SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);
返回必須同時包含“apple banana”或者必須同時包含“apple orange”的記錄。
若同時包含“apple banana”和“apple orange”的記錄,則“apple banana”的權重高于“apple orange”的權重。
看完上述內容,你們掌握mysql全文檢索怎么做的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。