第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 php 中搜索類似 google 的數(shù)據(jù)庫

如何在 php 中搜索類似 google 的數(shù)據(jù)庫

PHP
慕慕森 2023-03-04 17:46:25
您好,我想在我的網(wǎng)站中實(shí)現(xiàn)我自己的搜索功能,并且我想以所有可能的方式向用戶顯示結(jié)果。我目前正在使用這個查詢$rs = $conn->query("SELECT * FROM search_engine WHERE soundex(keyword) LIKE soundex('%$q%') UNION SELECT * FROM search_engine WHERE title LIKE '%$q%' OR link LIKE '%$q%' ORDER BY `clicks` DESC");我知道這個查詢不好。此查詢僅在參數(shù)與標(biāo)題、關(guān)鍵字或鏈接匹配時(shí)顯示結(jié)果,例如,當(dāng)我搜索Extract all url from sitemap.xml with PHP CURL查詢時(shí),我得到了結(jié)果,但是當(dāng)我嘗試此查詢時(shí),How to Extract all url from sitemap.xml with PHP CURL我無法獲得任何結(jié)果,所以我該怎么做才能進(jìn)行搜索功能強(qiáng)大。
查看完整描述

1 回答

?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個贊

我建立搜索引擎。

我將為您提供 6 個探索技巧,以便您可以繼續(xù)學(xué)習(xí)如何編程并在需要時(shí)繼續(xù)進(jìn)行。

提示#1:專注!

首先定義你想要完成的事情。在嘗試從頭開始構(gòu)建搜索引擎之前,想想你真正想做什么。這可能不是您的最終目標(biāo),也就是您真正想做的事情。

你真的想用這個想法爬網(wǎng)嗎:“使用 PHP CURL 從 sitemap.xml 中提取所有 url”?

或者您只是想在您的網(wǎng)站上添加一個搜索框,從您的產(chǎn)品數(shù)據(jù)庫中獲取產(chǎn)品數(shù)據(jù)并在您的網(wǎng)站上顯示該產(chǎn)品數(shù)據(jù),想法是:“我想在我的網(wǎng)站中實(shí)現(xiàn)我自己的搜索功能”?

這很難說。

如果您想向您的網(wǎng)站添加基于產(chǎn)品的“搜索功能”,則無需從XML 站點(diǎn)地圖中提取內(nèi)容。您只需從以下數(shù)據(jù)庫中檢索它:MySQL、PosgreSQL、OracleSQL Server等...,然后將結(jié)果顯示在您的搜索結(jié)果頁面上。當(dāng)人們想在他們的網(wǎng)站中添加“搜索功能”時(shí),這通常是人們想要做的。

提示#2:對于搜索,越簡單越快。

在編寫代碼時(shí)最好記住這一點(diǎn):簡單永遠(yuǎn)贏。它被稱為“SAW 原理”。

首先,讓我們看看您的 SQL。它有 2 個 select 語句,用關(guān)鍵字連接在一起UNION。

SELECT * FROM search_engine

WHERE soundex(keyword) LIKE soundex('%$q%') 

UNION 

    SELECT * FROM search_engine 

    WHERE title LIKE '%$q%' OR link LIKE '%$q%'

ORDER BY `clicks` DESC

由于這看起來像是來自同一個數(shù)據(jù)庫表,因此您可以按如下方式組合它......其中更改替換UNION SELECT * FROM search_engine WHERE為OR:


SELECT * FROM search_engine

WHERE soundex(keyword) LIKE soundex('%$q%') 

OR title LIKE '%$q%' OR link LIKE '%$q%'

ORDER BY `clicks` DESC

因此,如果您可以刪除 UNION 關(guān)鍵字并將 2 個 select 語句合并為 1 個 select 語句,那么數(shù)據(jù)庫引擎可以做更少的工作來完成搜索查詢請求。

如果您使用 2 個不同的表,那么您需要做一些功課來查找稱為倒排索引的概念。概念是一樣的:讓搜索盡可能簡單……讓數(shù)據(jù)庫服務(wù)器做盡可能少的工作……讓搜索體驗(yàn)運(yùn)行得盡可能快!

盡管更簡單意味著更快,但并不意味著更準(zhǔn)確。

提示#3:準(zhǔn)確性使搜索引擎與用戶更相關(guān)。將此視為準(zhǔn)確性 =“強(qiáng)大”。

讓我們看看這些頁面標(biāo)題以及搜索查詢?nèi)绾闻c它們一起使用:

  1. 使用 PHP CURL 從 sitemap.xml 中提取所有 url

  2. 如何使用 PHP CURL 從 sitemap.xml 中提取所有 url

為了使這些結(jié)果準(zhǔn)確匹配,您必須在數(shù)據(jù)庫中包含第二頁的完整標(biāo)題。如果您只有第一頁的標(biāo)題(沒有“如何”),那么對第二頁標(biāo)題的查詢將找不到第一頁標(biāo)題的結(jié)果。這就是您在網(wǎng)站的搜索功能中注意到的問題。

原因是對第一頁標(biāo)題的查詢是第二頁標(biāo)題內(nèi)的部分完全匹配。然而,對第二頁標(biāo)題的查詢不是完全匹配,甚至也不是第一頁標(biāo)題的部分匹配。

為了解決這個問題,搜索引擎以關(guān)鍵字為基礎(chǔ)工作。

提示 #4:了解關(guān)鍵字與停用詞以及如何在搜索查詢中解析它們。

在搜索查詢中,既有稱為關(guān)鍵字的相關(guān)關(guān)鍵字,也有稱為停用詞的不相關(guān)垃圾詞。您可能想研究停用詞的概念以及搜索引擎如何使用它們,或者最常見的是,在實(shí)際執(zhí)行搜索查詢之前將它們丟棄。

因此,在您的查詢中,這些是您獨(dú)特且有意義的關(guān)鍵字。當(dāng)您單獨(dú)考慮每個詞時(shí),它們具有獨(dú)立的具體含義。

array('extract', 'url', 'sitemap.xml', 'PHP', 'CURL')

具體含義:

  • Extract = 拉、抓住、從一組中抓取某物。

  • URL = 超鏈接。

  • sitemap.xml = XML 站點(diǎn)地圖文件。

  • PHP = 編程語言名稱。

  • CURL = 命令行 URL 提取。

這些很可能是停用詞,它們本身沒有意義或含義模糊。

array('How', 'to', 'all', 'from', 'with');

含糊的意思:

  • How = 問題的簡單引導(dǎo)。那么搜索引擎用這個做什么呢?它把它扔掉了。

  • To = 連接詞。它指向一組東西。也許有用。也許不會。扔了它。

  • 全部 = 一組所有的東西??赡苡杏?,但對搜索引擎來說似乎很模糊。扔了它。

  • From = 另一個連接詞。它指向一組其他東西。又是含糊不清。扔了它。

  • 有=包括。另一個連接詞。也很模糊。計(jì)算機(jī)不知道在 with 關(guān)鍵字后添加“PHP”或“PHP CURL”。無賴!扔了它。

搜索引擎通常會去除停用詞并查詢有意義的關(guān)鍵字以獲得結(jié)果。相關(guān)性得分是搜索結(jié)果的準(zhǔn)確程度。

這是一個假設(shè)的例子(我在寫這篇文章時(shí)憑空想出來的):如果一個查詢發(fā)現(xiàn)一個頁面包含 5 個唯一關(guān)鍵字中的 1 個,那么相關(guān)性得分將為 20%。如果它找到一個包含 5 個唯一關(guān)鍵字中的 4 個的頁面,則相關(guān)性分?jǐn)?shù)將為 80%。這是假設(shè)的,因?yàn)檫@不是任何特定搜索引擎當(dāng)前的工作方式。它只是一個基本概念,用一個簡單的例子來解釋一個觀點(diǎn)。

相關(guān)性算法和分?jǐn)?shù)實(shí)際上取決于搜索引擎設(shè)計(jì)者/構(gòu)建者來創(chuàng)建。相關(guān)性算法可以像搜索引擎設(shè)計(jì)者和/或構(gòu)建者想要的那樣簡單或復(fù)雜。搜索引擎開發(fā)人員可能會花費(fèi)大量時(shí)間來微調(diào)相關(guān)性算法和評分。它還取決于所使用的搜索算法以及搜索機(jī)器人為這些算法找到數(shù)據(jù)的效果。

提示 #5:探索構(gòu)建搜索機(jī)器人!

如果你真的想完成這個,你應(yīng)該考慮構(gòu)建搜索機(jī)器人:“使用 PHP CURL 從 sitemap.xml 中提取所有 url”。

我也寫了一個搜索機(jī)器人。它已經(jīng)抓取了超過 100 萬個 URL!

PHP Curl 不是提取鏈接的工具。這是從 1 個 URL 獲取內(nèi)容的原因。必須編寫搜索機(jī)器人來解析返回的 HTML,以便它可以找出從這些搜索結(jié)果中提取的內(nèi)容。

只是一個警告:人們不會在他們的 URL 中編寫完美的 HTML 語法。因此,您的搜索機(jī)器人需要進(jìn)行大量微調(diào)才能檢測草率的編程,這會使您的搜索機(jī)器人崩潰。這是一個巨大的時(shí)間承諾!如果您決定繼續(xù)構(gòu)建自己的搜索機(jī)器人,請準(zhǔn)備好在這個項(xiàng)目上花費(fèi)數(shù)年甚至數(shù)十年。構(gòu)建搜索引擎是一個漫長的旅程!您的搜索機(jī)器人將崩潰數(shù)百至數(shù)千次,然后您才能讓它抓取數(shù)百萬個 URL。

所以...您真的要“從 sitemap.xml 中提取所有 url”還是要查詢駐留在數(shù)據(jù)庫中的以前上傳的產(chǎn)品數(shù)據(jù)列表?后一種數(shù)據(jù)庫查詢的想法構(gòu)建起來要快得多,而且將來更容易維護(hù)!

提示 #6:如果您不想花很多時(shí)間從頭開始構(gòu)建搜索引擎,從頭開始構(gòu)建搜索機(jī)器人,從頭開始構(gòu)建相關(guān)性評分算法,那么請查看一些預(yù)構(gòu)建的搜索引擎解決方案。這里有一些流行的。和他們一起玩會很有趣!

  1. 彈性搜索

  2. Lucene

  3. 太陽能

結(jié)論:搜索引擎不容易建立!他們可能需要數(shù)年時(shí)間才能建成。如果您真的想實(shí)現(xiàn)這個目標(biāo):“我想以所有可能的方式向用戶展示結(jié)果”,請準(zhǔn)備好投入大量時(shí)間(很簡單是幾個月,實(shí)際上是幾年,可能是幾十年)。


查看完整回答
反對 回復(fù) 2023-03-04
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號