我一直在嘗試修復我在文章搜索中收到的一些錯誤,但是根據我搜索的查詢,我遇到了奇怪的行為,我一直在嘗試修復,比如將查詢包裝在“”中,替換特殊字符用空格或用空格/右引號、大括號、括號分隔文本,但它并沒有太大用處。
我瀏覽了很多頁面/檔案,并沒有完全理解這個搜索是如何作業的。這里有更多關于這個問題的背景:
此文章搜索對標題和內容使用自然語言匹配謂詞。內容和標題都可能包含特殊字符、數字、ips 甚至 URL,因此,預期此搜索可以回傳最準確的結果/準確的結果,但這并不是一直發生的,它會因用戶的方式而異鍵入文本。
一個例子:
如果我按整個文章標題搜索,例如:Guess who's back - tl;dr: Emot在結果的頂部,我會得到與標題匹配的文章,但我也會得到其他結果,這些結果似乎包含我輸入的文本中的任何單詞。
但是,如果我搜索上一個示例的片段:tl;dr:我沒有得到任何結果,知道為什么會發生這種情況嗎?執行搜索時是否有 MYSQL 文本搜索應用的任何內部配置?
值得一提的是,我不知道表/索引是如何配置的,我無權訪問此類資訊,我只是想了解 MYSQL 如何與它一起作業,以便能夠告訴我的經理某些行為他和客戶期望會或不會可能取決于他們正在搜索的內容。
對于任何可以幫助我的人,在此先感謝。
uj5u.com熱心網友回復:
起點是 mysql 關于Natural Language Full-Text Searches的檔案。檔案非常全面。
- 匹配標題并獲得多個結果:
全文引擎將短語拆分為單詞,并在 FULLTEXT 索引中搜索單詞。非單詞字符不需要完全匹配:短語搜索只需要匹配包含與短語完全相同的單詞并且順序相同。例如,“測驗短語”匹配“測驗,短語”。
- 搜索
tl;dr和沒有得到結果在兩個不同的地方進行了解釋,第一個描述了全文搜索考慮一個詞,第二個描述了索引太短詞的進一步限制:
MySQL FULLTEXT 實作將任何真正的單詞字符(字母、數字和下劃線)序列視為一個單詞。該序列也可能包含撇號 ('),但連續不超過一個。這意味著aaa'bbb被視為一個單詞,但aaa''bbb被視為兩個單詞。FULLTEXT 決議器會去除單詞開頭或結尾的撇號;'aaa'bbb' 將被決議為 aaa'bbb。內置的 FULLTEXT 決議器通過查找某些分隔符來確定單詞的開始和結束位置;例如,(空格)、 、(逗號)和 。(時期)。
任何太短的單詞都會被忽略。全文搜索找到的默認最小單詞長度對于 InnoDB 搜索索引是三個字符,對于 MyISAM 是四個字符。
根據您向我描述的內容,您似乎在尋找更像是精確的子字串匹配(如運算子),而不是全文搜索。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492258.html
