我有這樣的查詢:等效搜索
SELECT * FROM table WHERE col LIKE '%word'
現在什麼是全文上述查詢其相當於索引?
應當指出的是,這樣做筆記的工作:
SELECT * FROM table WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE)
編輯
我想這句話,選擇 '測試':
它是一個t檢驗。
我有這樣的查詢:等效搜索
SELECT * FROM table WHERE col LIKE '%word'
現在什麼是全文上述查詢其相當於索引?
應當指出的是,這樣做筆記的工作:
SELECT * FROM table WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE)
編輯
我想這句話,選擇 '測試':
它是一個t檢驗。
我不認爲MySQL直接支持這一點。
SELECT t.*
FROM (SELECT *
FROM table
WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE)
) t
WHERE col LIKE '%word';
(我不是100%肯定的子查詢需要)
如果你知道,這將是搜索的一個常見的類型,你可以破解:您可以通過執行加快查詢一個辦法。修改每個文件是這樣的:
BEGINDOCMARKER blah blah blah ENDDOCMARKER
然後你可以搜索:
SELECT *
FROM table
WHERE MATCH(col) AGAINST('"word ENDDOCMARKER"' IN BOOLEAN MODE)
如果你採取這種方法,要小心標記。使用^
和$
(ala正則表達式)是誘人的,但由於最小的字長和其他原因,這些將被取消索引。一些不尋常的人物混亂是一個很好的選擇。
另請注意,這會使文本變得更長,並且您可能希望爲演示目的刪除這些文字。如果空間不是問題,則複製該字段,一個用於搜索,另一個用於呈現。這可以用於另一個原因:處理同義詞。或者,考慮其他文本搜索選擇。其他工具確實允許在查詢中定位信息。
其實你的第一個查詢是錯誤的,因爲'MATCH()'無法找到我想要的*(然後通過'LIKE()'在'MATCH()'的結果中搜索無用)*。另外你的第二個查詢是徒勞的,因爲我可以用這樣的明星來做到這一點:'AGAINST('word'* BOOLEAN MODE)''。實際上我的問題是關於前綴(不是後綴),我的意思是我需要在「ttest」中選擇「test」或者在「hello」中使用MATCH()來選擇「ello」。可能嗎? – stack
沒有等價物。我不認爲MySQL允許相對於文檔的開始和結束的定位信息。你可以做的最好的事情就是使用'match()'後跟一個'like'。 –