簡體   English   中英

使用MyISAM中的FullText搜索匹配精確值

[英]Match exact value with FullText search in MyISAM

我有一個包含2列的表格,分別為電子郵件和ID。 我想在列中搜索完全匹配的電子郵件值。

我已經用MyISAM Engine設置了我的表,並用FullText索引設置了Email列。 當我運行查詢以搜索完全匹配時,它有時會工作,有時會失敗。

這是我的表定義

CREATE TABLE `tbl_email` (
    `email` varchar(60),
    `uid` int(11)
    FULLTEXT KEY `EmailIndex` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

這是我的查詢以與我的電子郵件值匹配

select uid from tbl_email where MATCH(email) AGAINST ('abcdefghi@yahoo.com') 
limit 1;

即使表中有匹配結果,有時也可以工作,有時也無法返回匹配結果。 我做錯什么了嗎? 我該怎么做才能匹配全文搜索中的確切值?

我也嘗試過使用IN BOOLEAN MODE,但這沒用,就像這樣

select uid from tbl_email where MATCH(email) AGAINST ('abcdefghi@yahoo.com' 
IN BOOLEAN MODE) limit 1;

您不必使用全文匹配,只需運行:

SELECT uid FROM tbl_email WHERE email='abcedfghi@yahoo.com' LIMIT 1;

該查詢應准確返回您要獲取的內容。

根據MySQL 5.5參考頁,在使用FULLTEXT查找確切短語時,您會將其括在單引號和雙引號中。 單引號是定界符,而雙引號則封裝了您的查詢。

例如: ... MATCH(email) AGAINST('"someone@example.com"') ...

但是,呼應其他人已經說過的話,一個簡單的WHERE子句無法幫助您解決查詢的問題。 我認為FULLTEXT更適合在記錄中的信息堆中查找關鍵字,而不是像電子郵件字段那樣的單個值字段。

據我所知,FullText索引搜索將搜索字符串解釋為自然人類語言中的短語,並在必要時中斷單詞,如http://dev.mysql.com/doc/refman/5.5/en/fulltext-上所述search.html ,最重要的是這里

* 停用詞列表適用。 另外,出現在50%或更多行中的單詞被認為是通用的,並且不匹配。 *

而且我相信您的每封電子郵件都將帶有.com (。作為停用詞),這意味着您的整個表格將與您提供的搜索相匹配。

您最好使用InnoDB進行簡單索引編制,因為這樣可以更快地插入記錄並簡化where子句。

我不知道用於全文搜索的算法是什么,而不是用於字符串搜索的普通索引,但是我想如果您使用全文索引來進行搜索,我猜由於不同的解釋,它將比普通索引花費更多的時間,因為那樣的話看看每個電子郵件值,因為它們都有停用詞,例如@和.com等。但這只是我的理解,我不是數據搜索算法制造商。

暫無
暫無

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

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