手把手教你做关键词匹配项目(搜索引擎)---- 第十六天,教你做----_PHP教程
手把手教你做关键词匹配项目(搜索引擎)---- 第十六天,教你做----
第十六天
友情客串:屌丝的坑人表单神器
起点:手把手教你做关键词匹配项目(搜索引擎)---- 第一天
回顾:手把手教你做关键词匹配项目(搜索引擎)---- 第十五天
14天pdf版:http://files.cnblogs.com/oshine/%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%81%9A%E5%85%B3%E9%94%AE%E8%AF%8D%E5%8C%B9%E9%85%8D%E9%A1%B9%E7%9B%AE%2814%E5%A4%A9%29.pdf
15天内的源码:
http://files.cnblogs.com/oshine/myproject.rar
从上次小帅帅跟于老大讨论完毕后,有个很郁闷的事情还没定下来,就是我们已有对应关系、反义词以及近义词这些数据它的数据格式是怎样的?
小帅帅要弄懂这些才能继续进行下去,于是他又去请教于老大。
于老大就对小帅帅说,我们先不考虑这么多因素,我们先从实际出发,我们先做反义词这块,就先从女装开始,女装是个类目吧,我们就按类目开始做。
那么表结构的字段就有类目、反义词。
小帅帅把表创建了出来:
<span>CREATE</span> <span>TABLE</span><span> `category_backlist` ( `cid` </span><span>BIGINT</span>(<span>20</span>) <span>DEFAULT</span> <span>NULL</span> COMMENT <span>'</span><span>类目ID</span><span>'</span><span>, `catmatch` </span><span>VARCHAR</span>(<span>50</span>) <span>CHARACTER</span> <span>SET</span> utf8 <span>DEFAULT</span> <span>NULL</span> COMMENT <span>'</span><span>类目名称</span><span>'</span><span>, `word` </span><span>VARCHAR</span>(<span>18</span>) <span>CHARACTER</span> <span>SET</span> utf8 <span>DEFAULT</span> <span>NULL</span> COMMENT <span>'</span><span>关键词</span><span>'</span><span>, `created` </span><span>DATETIME</span> <span>DEFAULT</span> <span>NULL</span> COMMENT <span>'</span><span>录入时间</span><span>'</span><span>, </span><span>UNIQUE</span> <span>KEY</span><span> `cid` (`cid`,`keyword`) ) ENGINE</span><span>=</span>INNODB <span>DEFAULT</span> CHARSET<span>=</span>utf8 COLLATE<span>=</span>utf8_bin
小帅帅并把数据补齐了。
<span>INSERT</span> <span>INTO</span> category_backlist(cid,catmatch,word)<span>VALUES</span>("<span>50010850</span><span>","女装","男"); </span><span>INSERT</span> <span>INTO</span> category_backlist(cid,catmatch,word)<span>VALUES</span>("<span>50010850</span><span>","女装","童"); </span><span>INSERT</span> <span>INTO</span> category_backlist(cid,catmatch,word)<span>VALUES</span>("<span>50010850</span><span>","女装","宝宝"); #......</span>
小帅帅很轻松的把代码也改正了一下。
<?<span>php </span><span>abstract</span> <span>class</span><span> CharListHandle { </span><span>protected</span> <span>$charlist</span><span>; </span><span>protected</span> <span>$selectorItem</span><span>; </span><span>public</span> <span>function</span> __construct(<span>$charlist</span>,<span>$selectorItem</span><span>){ </span><span>$this</span>->charlist = <span>$charlist</span><span>; </span><span>$this</span>->selectorItem = <span>$selectorItem</span><span>; } </span><span>abstract</span> <span>function</span> <span>exec</span><span>(); } </span><span>class</span> BacklistCharListHandle <span>extends</span><span> CharListHandle { </span><span>public</span> <span>function</span> <span>exec</span><span>(){ </span><span>$sql</span> = "select word from category_backlist where cid='<span>$this</span>->selectorItem->cid'"<span>; </span><span>$backlist</span> = DB::makeArray(<span>$sql</span><span>); </span><span>foreach</span>(<span>$backlist</span> <span>as</span> <span>$char</span><span>){ </span><span>$this</span>->charlist->addBlacklist(<span>$char</span><span>); } } } </span><span>class</span><span> Selector { </span><span>private</span> <span>static</span> <span>$charListHandle</span> = <span>array</span><span>( </span>"黑名单" => "BacklistCharListHandle"<span> ); </span><span>public</span> <span>static</span> <span>function</span> select(<span>$num_iid</span><span>) { </span><span>$selectorItem</span> = SelectorItem::createFromApi(<span>$num_iid</span><span>); Logger</span>::trace(<span>$selectorItem</span>-><span>props_name); </span><span>$charlist</span> = <span>new</span><span> CharList(); </span><span>foreach</span> (self::<span>$charListHandle</span> <span>as</span> <span>$matchKey</span> => <span>$className</span><span>) { </span><span>$handle</span> = self::createCharListHandle(<span>$className</span>, <span>$charlist</span>, <span>$selectorItem</span><span>); </span><span>$handle</span>-><span>exec</span><span>(); } </span><span>//</span><span>do search things</span> <span>var_dump</span>(<span>$charlist</span><span>); } </span><span>public</span> <span>static</span> <span>function</span> createCharListHandle(<span>$className</span>, <span>$charlist</span>, <span>$selectorItem</span><span>) { </span><span>if</span> (<span>class_exists</span>(<span>$className</span><span>)) { </span><span>return</span> <span>new</span> <span>$className</span>(<span>$charlist</span>, <span>$selectorItem</span><span>); } </span><span>throw</span> <span>new</span> <span>Exception</span>("class not exists", 0<span>); } }</span>
小帅帅的原稿本来不是这样的,他的原稿:
<span>CharListHandle 的属性有两个 一个是charlist 一个是cid<br /><br />于老大看了之后就要小帅帅把cid换成了selectorItem,原因嘛要小帅帅去琢磨。<br /><br /><br /></span>
小帅帅还写了个DB操作的类,代码如下:
<?<span>php </span><span>define</span>('DATABASE_HOST','127.0.0.1'<span>); </span><span>define</span>('DATABASE_USER','xiaoshuaishuai'<span>); </span><span>define</span>('DATABASE__PASSWORD','xiaoshuaishuai'<span>); </span><span>define</span>('DATABASE_CHARSET','utf-8'<span>); </span><span>class</span><span> DB { </span><span>public</span> <span>static</span> <span>$conn</span> = <span>null</span><span>; </span><span>public</span> <span>static</span> <span>function</span><span> Connect(){ </span><span>if</span>(self::<span>$conn</span> == <span>null</span><span>){ self</span>::<span>$conn</span> = <span>mysql_connect</span>(DATABASE_HOST,DATABASE_USER,<span>DATABASE__PASSWORD); </span><span>mysql_query</span>("SET NAMES '".DATABASE_CHARSET."'",self::<span>$conn</span><span>); </span><span>mysql_select_db</span>("dict",self::<span>$conn</span><span>); </span><span>return</span> self::<span>$conn</span><span>; } </span><span>return</span> self::<span>$conn</span><span>; } </span><span>public</span> <span>static</span> <span>function</span> Query(<span>$sql</span><span>){ </span><span>return</span> <span>mysql_query</span>(<span>$sql</span>,self::<span>Connect()); } </span><span>public</span> <span>static</span> <span>function</span> makeArray(<span>$sql</span><span>){ </span><span>$rs</span> = self::Query(<span>$sql</span><span>); </span><span>$result</span> = <span>array</span><span>(); </span><span>while</span>(<span>$data</span> = <span>mysql_fetch_assoc</span>(<span>$rs</span><span>)){ </span><span>$result</span>[] = <span>$data</span><span>; } </span><span>return</span> <span>$result</span><span>; } } </span>
小帅帅把这代码拿给于老大的时候,于老大很开心。
于老大对小帅帅说,现在我们这个黑名单的改动,不管你怎么加或者怎么删除都不会影响系统的正常运行了把,而且我们可以很好的跟业务结合,这下这个黑名单的任务,小帅帅你觉得教给谁去做比较合适。
小帅帅听到可以把任务转交,很开心:做这些事情,我觉得产品或者运营部门比较合适。
于老大拍了拍小帅帅的肩膀说道:这件事情就交给你去落实了。
偶尔的职责分离不一定是懒惰的行为,从整体上来说是让整个服务做到更专业、更有效率。
小帅帅只好去落实于老大的任务去了

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Anpassung der Blendengröße hat einen entscheidenden Einfluss auf den Fotoeffekt. Das Xiaomi Mi 14 Ultra bietet eine beispiellose Flexibilität bei der Einstellung der Kamerablende. Damit jeder die Blende reibungslos einstellen und die Blendengröße frei anpassen kann, bietet Ihnen der Herausgeber hier eine ausführliche Anleitung zum Einstellen der Blende beim Xiaomi Mi 14Ultra. Wie stelle ich die Blende beim Xiaomi Mi 14Ultra ein? Starten Sie die Kamera, wechseln Sie in den „Professionellen Modus“ und wählen Sie die Hauptkamera aus – W-Objektiv. Klicken Sie auf die Blende, öffnen Sie das Blendenrad, A ist automatisch, wählen Sie je nach Bedarf f/1,9 oder f/4,0.

Fermats letzter Satz steht kurz davor, von der KI erobert zu werden? Und das Bedeutsamste an der ganzen Sache ist, dass der letzte Satz von Fermat, den die KI gerade lösen wird, genau dazu dient, zu beweisen, dass KI nutzlos ist. Früher gehörte die Mathematik zum Bereich der reinen menschlichen Intelligenz; heute wird dieses Gebiet von fortschrittlichen Algorithmen entschlüsselt und mit Füßen getreten. Bild Der letzte Satz von Fermat ist ein „berüchtigtes“ Rätsel, das Mathematikern seit Jahrhunderten Rätsel aufgibt. Es wurde 1993 bewiesen, und jetzt haben Mathematiker einen großen Plan: den Beweis mithilfe von Computern nachzubilden. Sie hoffen, dass etwaige logische Fehler in dieser Version des Beweises durch einen Computer überprüft werden können. Projektadresse: https://github.com/riccardobrasca/flt

Ce Modifier (CheatEngine) ist ein Spielmodifizierungstool zum Ändern und Bearbeiten des Spielspeichers. Als Nächstes erklärt Ihnen der Editor, wie Sie Chinesisch in Ce Modifier festlegen. Bei der neuen Software, die wir herunterladen, kann es verwirrend sein, dass die Benutzeroberfläche nicht auf Chinesisch ist. Auch wenn diese Software nicht in China entwickelt wurde, gibt es Möglichkeiten, sie in die chinesische Version zu konvertieren. Dieses Problem kann durch einfaches Anwenden des chinesischen Patches gelöst werden. Öffnen Sie nach dem Herunterladen und Installieren der CheatEngine-Software (ce modifier) den Installationsort und suchen Sie den Ordner mit dem Namen „Sprachen“, wie in der folgenden Abbildung dargestellt

Honor 90GT ist ein kostengünstiges Smartphone mit hervorragender Leistung und hervorragendem Benutzererlebnis. Allerdings kann es manchmal zu Problemen kommen, z. B. wie aktualisiere ich Honor MagicOS8.0 auf dem Honor 90GT? Dieser Schritt kann bei verschiedenen Mobiltelefonen und Modellen unterschiedlich sein. Lassen Sie uns also besprechen, wie Sie das System richtig aktualisieren. Wie aktualisiere ich Honor MagicOS 8.0 auf Honor 90GT? Laut Nachrichten vom 28. Februar hat Honor heute das öffentliche Beta-Update von MagicOS8.0 für seine drei Mobiltelefone 90GT/100/100Pro veröffentlicht. Die Paketversionsnummer ist 8.0.0.106 (C00E106R3P1). . Stellen Sie sicher, dass der Akku des 90GT vollständig aufgeladen ist.

Apple hat am Dienstag das iOS 17.4-Update veröffentlicht, das eine Reihe neuer Funktionen und Korrekturen für iPhones bringt. Das Update enthält neue Emojis und EU-Nutzer können diese auch aus anderen App-Stores herunterladen. Darüber hinaus stärkt das Update auch die Kontrolle der iPhone-Sicherheit und führt weitere Einstellungsoptionen für den „Schutz gestohlener Geräte“ ein, um Benutzern mehr Auswahl und Schutz zu bieten. „iOS17.3 führt zum ersten Mal die Funktion „Schutz vor gestohlenen Geräten“ ein, die den vertraulichen Informationen der Benutzer zusätzliche Sicherheit verleiht. Wenn der Benutzer nicht zu Hause oder an anderen vertrauten Orten ist, erfordert diese Funktion, dass der Benutzer zum ersten Mal biometrische Informationen eingibt Zeit und nach einer Stunde müssen Sie Informationen erneut eingeben, um auf bestimmte Daten zuzugreifen und diese zu ändern, z. B. um Ihr Apple-ID-Passwort zu ändern oder den Schutz vor gestohlenen Geräten zu deaktivieren.

Aktuelle Nachrichten: LackMagic hat das öffentliche Beta-Update 18.5PublicBeta2 der Videobearbeitungssoftware DaVinci ResolveStudio veröffentlicht, das AV1-Kodierungsunterstützung für AMD Radeon-Grafikkarten bietet. Nach dem Update auf die neueste Version können Benutzer von AMD-Grafikkarten die Hardwarebeschleunigung für die AV1-Kodierung in DaVinci Resolve Studio nutzen. Obwohl der Beamte keine Angaben zu den unterstützten Architekturen oder Modellen macht, wird erwartet, dass alle Benutzer von AMD-Grafikkarten diese Funktion ausprobieren können. Im Jahr 2018 veröffentlichte AOMedia einen neuen Videokodierungsstandard AV1 (AOMediaVideoCodec1.0). AV1 wird von mehreren produziert

Beliebte Metaverse-Spieleprojekte, die im letzten Krypto-Zyklus gegründet wurden, beschleunigen ihre Expansion. Am 4. März kündigte PlanetMojo, die Web3-Spiele-Metaverse-Plattform, eine Reihe wichtiger Entwicklungen in seiner Spieleökologie an, darunter die Ankündigung des kommenden Parkour-Spiels GoGoMojo und den Start der neuen Staffel „Way of War“ im Flaggschiff-Autoschach Spiel MojoMelee und die Feier des neuen Die erste ETH-Serie „WarBannerNFT“ startete diese Saison in Zusammenarbeit mit MagicEden. Darüber hinaus gab PlanetMojo bekannt, dass sie planen, noch in diesem Jahr Android- und iOS-Mobilversionen von MojoMelee auf den Markt zu bringen. Dieses Projekt wird Ende 2021 gestartet. Nach fast zwei Jahren harter Arbeit in der Baisse wird es bald abgeschlossen sein.

Antwort: Ja, Golang bietet Funktionen, die das Hochladen von Dateien vereinfachen. Details: Der MultipartFile-Typ bietet Zugriff auf Dateimetadaten und -inhalte. Die FormFile-Funktion ruft eine bestimmte Datei aus der Formularanforderung ab. Die Funktionen ParseForm und ParseMultipartForm werden zum Parsen von Formulardaten und mehrteiligen Formulardaten verwendet. Die Verwendung dieser Funktionen vereinfacht den Dateiverarbeitungsprozess und ermöglicht Entwicklern, sich auf die Geschäftslogik zu konzentrieren.
