簡體   English   中英

PHP MySQL搜索全文

[英]php mysql search fulltext

表結構:

Companies: id, name, city, branch, keywords, country

關鍵字字段包含城市名稱和分支名稱,我現在僅使用帶有通配符的LIKE,例如'%music london%'將返回'musicfactory london'

但這還不夠精確,例如,如果用戶要搜索倫敦(一家餐館)的Vini&Magraine,並且輸入的內容是“ vini londen”,則找不到該輸入,但是如果用戶插入“ magraine london”,則會被找到。

所以問題是可能是關鍵字的順序,現在我打算轉換為全文搜索,我已經在關鍵字字段上創建了索引,關鍵字字段也是一個好主意嗎?

我的主要問題是,我使用以下查詢創建了全文搜索:

SELECT id, name, branch FROM companies WHERE MATCH(keywords) AGAINST(? IN BOOLEAN MODE) AND country = ? LIMIT 7

但是,它沒有返回正確的結果嗎? 什么是最好,最有效的解決方案?

謝謝閱讀。

這是對運營商的標准匹配的很好分解。 它應該闡明如何編寫查詢:

http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

如果我正確地閱讀了您的問題,則說明您在companies表中的“關鍵字”列是否是個好主意-我說這取決於您的填充方式,但是可以肯定,這還不錯。 我以前使用的是一個集體關鍵字列,該列以前包含相關字段集合中的所有標准文本,並且效果很好。

其他幾個注意事項-

1)我認為您的LIKE示例存在缺陷,根據該規則,我很驚訝您獲得了任何結果。 %是定向的通配符。 因此,“%music london%”不應返回“ musicfactory london”。 您必須將其寫為WHERE( keywords LIKE'%music%'和keywords LIKE'%london%')才能正常工作。

2)全文搜索只能在MyISAM表上使用,因此,如果使用依賴於innoDB的框架,則需要創建一個關系解決方法。 (或您使用innoDB的任何其他原因)

3)默認ini設置中,match對的默認最小字符數為4。 您需要在配置中設置較低的值,然后如果需要較低的最小字符范圍,則重建全文索引。 考慮一下“藝術”之類的詞,您會知道為什么建議降低此值。 否則,對於較短的字符串,您可能必須編寫條件才能在對匹配和LIKE模式之間切換。

暫無
暫無

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

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