請教一個關於php搜尋的問題

來源:互聯網
上載者:User
比如我輸入關鍵字 “ 真心 ” 可以把“ 我真的已經把心給了你 ” 這句話搜出來,如何用php實現?請解高手解答。


回複討論(解決方案)

那要看你用什麼去實現了
如果是資料庫的話 資料量不大 可以用 like

那要看你用什麼去實現了
如果是資料庫的話 資料量不大 可以用 like



是從資料庫裡某欄位中檢索

那要看你用什麼去實現了
如果是資料庫的話 資料量不大 可以用 like



現在的問題是關鍵字被拆分開並在包括被拆分開的欄位中檢索,這個用like怎麼實現

加個表,欄位
關聯id,關鍵詞

在資料增加修改時候,php迴圈你的詞庫,如果有這些詞就把這些詞放到這個表裡,搜尋時候搜尋這個表

最基礎的 SQL模糊查詢

$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v)    $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;

樓上寫的 複雜一點,但通用
其實就是 把你的 關鍵字 迴圈 分割一下 分別LIKE

WHERE KWORD LIKE '%真%' AND KWORD LIKE '%心%' 這個只有兩個字都匹配了 才搜出來
WHERE KWORD LIKE '%真%' OR KWORD LIKE '%心%' 這個匹配一個就可以搜出來

$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v)    $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;



這個是不是會把帶"真"的欄位全部搜尋出來,並把帶"心"的欄位全部搜尋出來?

事實上我的要結果是:假如這個欄位只包括一個"真"字,這個欄位不會被搜尋出來,比如:“我真的好喜歡” 這個不會被搜出來,或者“我的心情很好”這個也不會搜出來。

而是包括“真心” 或者包括 “真 ”和 “心” 的欄位會被搜出來。

比如:我真心實意的喜歡。這句話會被搜出來。或者“ 我真的已經把心給了你 ” 這句話也會被搜出來。

這個被用在辦公用品銷售網站搜尋產品上,現在遇到這個 問題。

樓上寫的 複雜一點,但通用
其實就是 把你的 關鍵字 迴圈 分割一下 分別LIKE

WHERE KWORD LIKE '%真%' AND KWORD LIKE '%心%' 這個只有兩個字都匹配了 才搜出來
WHERE KWORD LIKE '%真%' OR KWORD LIKE '%心%' 這個匹配一個就可以搜出來



我要的結果是這樣的,你開啟下面的網址,輸入 “檔案透明” 這四個字看下效果:
http://www.staples.cn/word/%E6%96%87%E4%BB%B6%E9%80%8F%E6%98%8E

加個表,欄位
關聯id,關鍵詞

在資料增加修改時候,php迴圈你的詞庫,如果有這些詞就把這些詞放到這個表裡,搜尋時候搜尋這個表



不現實,這樣的字型檔太龐大了


$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v)    $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;



這個是不是會把帶"真"的欄位全部搜尋出來,並把帶"心"的欄位全部搜尋出來?

事實上我的要結果是:假如這個欄位只包括一個"真"字,這個欄位不會被搜尋出來,比如:“我真的好喜歡” 這個不會被搜出來,或者“我的心情很好”這個也不會搜出來。

而是包括“真心” 或者包括 “真 ”和 “心” 的欄位會被搜出來。

比如:我真心實意的喜歡。這句話會被搜出來。或者“ 我真的已經把心給了你 ” 這句話也會被搜出來。

這個被用在辦公用品銷售網站搜尋產品上,現在遇到這個 問題。

樓主為什麼不先試一下?



$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v)    $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;



這個是不是會把帶"真"的欄位全部搜尋出來,並把帶"心"的欄位全部搜尋出來?

事實上我的要結果是:假如這個欄位只包括一個"真"字,這個欄位不會被搜尋出來,比如:“我真的好喜歡” 這個不會被搜出來,或者“我的心情很好”這個也不會搜出來。

而是包括“真心” 或者包括 “真 ”和 “心” 的欄位會被搜出來。

比如:我真心實意的喜歡。這句話會被搜出來。或者“ 我真的已經把心給了你 ” 這句話也會被搜出來。

這個被用在辦公用品銷售網站搜尋產品上,現在遇到這個 問題。

樓主為什麼不先試一下?



試過了,可用,非常感謝
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.