跟大家講解下有關做一個搜索引擎,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說做一個搜索引擎,小編也收集到了有關做一個搜索引擎的相關資料,希望大家看到了會喜歡。
搜索引擎 php 百度 數據庫 搜索 就是PHP做一個搜索網站,類似百度那樣,對我網站內的所有信息進行搜索。 比喻是一個論壇搜索,我輸入:A B C。中間隔著空格,我能篩選出A,B,C三個分開的關鍵字,然后在數據庫進行搜索任何與這3個關鍵字的內容,這就好像是一個百度搜索或者谷歌搜索的原理。 我自己想到的難點有幾個: 1、對3個關鍵字進行處理的時候,是什么原理,用空格隔開,然后歸類為兩個不同的關鍵字?假如我兩個關鍵字之前有別的符號呢?例如A、B 那么處理的時候,也是A和B兩個關鍵字? 那么 A?B呢,怎么實現把關鍵字篩選出來?? 2、在對數據庫中進行搜索的時候,我有關鍵字 A,AB,ABC 3個關鍵字了,那么我是什么邏輯進行搜索?A或AB或ABC 還是A或B或C? 這個邏輯是怎樣?我有點不懂,要做成百度搜索之類的。 3、假如我有很多個搜索條件(參考上面的問題),那么多得搜索邏輯,是把很多個搜索邏輯放到一個sql語句(進行一次sql查詢之后返回一個結果array)?還是沒一個邏輯就一個sql語句,然后對每一句查詢返回結果array,然后再匯總? 回復討論(解決方案)或者我說白一點吧,我要做一個 找到美食 的網站,里面就是菜式,標簽,店鋪,地址之類的一些簡單信息,就這些,那我搜索的時候,輸入的關鍵字可能是標簽 或菜式名或店鋪名,或多個關鍵字一起,怎么實現?
額,是在thinkphp框架下做的,我現在最難的一點就是,接收前臺數據處理,和數據庫方面的sql語句以及邏輯,最好能給一下代碼,不行,講解下原理也好。謝謝
或者我說白一點吧,我要做一個 找到美食 的網站,里面就是菜式,標簽,店鋪,地址之類的一些簡單信息,就這些,那我搜索的時候,輸入的關鍵字可能是標簽 或菜式名或店鋪名,或多個關鍵字一起,怎么實現? 我是這樣想的。就一條sql 語句,別分開了再匯總,挺煩的,用模糊匹配,比如你有標簽(暫時字段是title),菜名(dish_name ),店名(dianming ),寫成:select * from table_name where title like %輸入的關鍵詞% or dish_name like %輸入的關鍵詞% or dianming like %輸入的關鍵詞% ...............我沒做過,但我想的是這樣的
首先說一下百度,谷歌,淘寶的搜索引擎算法還是有點復雜的,關鍵一直有變,不然市場上也不會出現專門做SEO的職業!不過你的網站估計不用那么復雜。我說說個人看法! 1.A與B用空格隔開可以單純的用 select * from 索引表 where 索引字段 like"%A%"or 索引字段 like"%B%", A、B可以加大權重,比如 select * from 索引表 where 索引字段 like"%A、B%"union select * from 索引表 where 索引字段 like"%A%"or 索引字段 like"%B%"這樣符合A、B就會排在前面,符合A或者符合B在后面 2,一樣的分權重,用union與order by 權重字段,外加上其他的條件語句not,or,and,in等,具體權重怎么分,看自己的算法了,比如標簽排第一,菜式排第二,這個根據具體需求做!(需要說一下,有些關鍵字屬于不重要的,經常出現,權重可以低一些,比如“我”這個字,有可能就會在很多地方出現了) 3.如果關鍵字太多,首先你要對關鍵字的長度做限制(淘寶他們也都有對關鍵字做限制),可以在進數據庫查詢前先用程序寫一個簡單的算法,把關鍵字先初步整理一下再放到SQL語句中。 當然這里講的還是簡單的方法,個人覺得除非你的網站規模已經非常大了,不然應該勉強夠用了! 友情提醒:需要建立索引表,還要需要對數據庫做優化,不然怕響應時間太慢!
一般多關鍵字間的 空格表示 或,A B ==> A or B 加號表示 與,A+B ==> A and B 你可以自行約定,但最好是符合布爾表達的規則 直接構造出 SQL 指令并不可取,因為變數太多,容易顧此失彼 當搜索表達式能格式化成布爾表達式時,你就可以套用現成的布爾表達式解析程序進行
1、對3個關鍵字進行處理的時候,是什么原理,用空格隔開,然后歸類為兩個不同的關鍵字?假如我兩個關鍵字之前有別的符號呢?例如A、B 那么處理的時候,也是A和B兩個關鍵字? 那么 A?B呢,怎么實現把關鍵字篩選出來?? 第一個問題是關于分詞的,目前有一個比較出名的系統叫"盤古分詞",你可以研究看看,另外百度,google之類的他們都建立了自己的詞庫,這一點我深信不疑 2、在對數據庫中進行搜索的時候,我有關鍵字 A,AB,ABC 3個關鍵字了,那么我是什么邏輯進行搜索?A或AB或ABC 還是A或B或C? 這個邏輯是怎樣?我有點不懂,要做成百度搜索之類的。 這個部分你可以開發的靈活一點,視狀況隨時調整就行了,目前大搜索引擎也是在隨時調整的. 3、假如我有很多個搜索條件(參考上面的問題),那么多得搜索邏輯,是把很多個搜索邏輯放到一個sql語句(進行一次sql查詢之后返回一個結果array)?還是沒一個邏輯就一個sql語句,然后對每一句查詢返回結果array,然后再匯總? 你可以這樣寫 $sql=''; if ($k!=''){ $sql.="OR Locate("%{$key}%",key)>0"; }"select ?? from 表 where 字段='值'{$sql}"這里我沒有用like,因為like效率不夠高
來源:php中文網