2013-01-25 33 views
1

//創建表全文檢索顯示錯誤的結果

CREATE TABLE `TEST_FULL_TEXT_SEARCH` 
(
    `ID` INT NOT NULL AUTO_INCREMENT, 
    `TEST` VARCHAR(45) NULL, 
    PRIMARY KEY (`ID`), 
    FULLTEXT INDEX `FULL_TEXT` (`TEST` ASC) 
) 
ENGINE = MyISAM; 

//插入一些記錄

INSERT INTO `TEST_FULL_TEXT_SEARCH` 
SELECT 1, 'vikas kumar gupta' UNION ALL 
SELECT 2, 'kratika gupta' UNION ALL 
SELECT 3, 'kratika sharma' UNION ALL 
SELECT 4, 'kratika vikas kumar gupta' UNION ALL 
SELECT 5, 'kratika shukla' UNION ALL 
SELECT 6, 'chetan kastwar' UNION ALL 
SELECT 7, 'kratika kastwar' ; 

//現在來選擇查詢

SELECT * FROM TEST_FULL_TEXT_SEARCH 
WHERE MATCH(test) 
AGAINST('kratika' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION); 

//或

SELECT * FROM TEST_FULL_TEXT_SEARCH 
WHERE MATCH(test) 
AGAINST('kratika' WITH QUERY EXPANSION); 

//輸出

1 vikas kumar gupta 
4 kratika vikas kumar gupta 
3 kratika sharma 
5 kratika shukla 
2 kratika gupta 
  1. 爲什麼不選擇在結果 'kratika kastwar' 設置?
  2. 爲什麼 '維卡斯·庫馬爾古普塔' 的第一

//現在我們在布爾模式

SELECT * FROM TEST_FULL_TEXT_SEARCH 
WHERE MATCH(test) 
AGAINST('kratika' IN BOOLEAN MODE); 

//輸出

2 kratika gupta 
3 kratika sharma 
4 kratika vikas kumar gupta 
5 kratika shukla 
7 kratika kastwar 
  1. 爲什麼「kratika kastwar搜索' 在那兒?

//現在我們沒有查詢擴展布爾模式搜索

SELECT * FROM TEST_FULL_TEXT_SEARCH 
WHERE MATCH(test) 
AGAINST('kratika' IN NATURAL LANGUAGE MODE); 

//輸出

No result found 

請說明爲什麼它在列表中

不選擇 ' kratika kastwar'

//編輯

爲什麼它顯示的是「維卡斯·庫馬爾古普塔IN NATURAL LANGUAGE MODE WITH QUERY EXPANSIONWITH QUERY EXPANSION在第一級不kratika相關的結果嗎?

回答

0

運行

SELECT ID, TEST, MATCH(TEST) AGAINST('kratika' IN NATURAL LANGUAGE MODE) AS MT FROM TEST_FULL_TEXT_SEARCH 
WHERE MATCH(TEST) 
AGAINST('kratika' IN NATURAL LANGUAGE MODE ); 

結果集是空的,因爲這個詞「kratika」是存在於所述行的至少50%。

請檢查http://dev.mysql.com/doc/refman/5.5/en//fulltext-natural-language.html,其中提到:

這種技術最適用於大集合(事實上,它是 仔細的調整)。對於非常小的表格,單詞分佈 沒有充分地反映它們的語義值,並且該模型有時會產生奇怪的結果。

他們有幾個樣本。

+0

閱讀鏈接,'SELECT * FROM文章 WHERE MATCH(標題,正文) AGAINST( '數據庫',自然科學進展語言模式);'取得兩個結果,而'數據庫'不是50%的行在我的情況下是相同的kratika – vikas