Erstellen eines benutzerdefinierten Code-Suchindex in Go für searchcode.com

Ich präsentiere etwas, das ich für einen einzigartigen Index zum Indizieren und Durchsuchen von Quellcode halte. Es kopiert Ideen aus der Bitfunnel-Implementierung von Bing, um einen sehr schnellen und speichereffizienten Trigram-Index für den Quellcode zu erstellen.

searchcode.com verwendet jetzt einen benutzerdefinierten Index, der wirklich von Ihnen geschrieben wurde Es indiziert 180 bis 200 Millionen Dokumente und 75 Milliarden Codezeilen Der Index arbeitet mit Bloomfiltern, die von einzelnen Dokumenttrigrammen gemeinsam genutzt werden Es leiht sich einige der grundlegenden Bitfunnel-Ideen aus, die in Microsofts Bing verwendet werden Die Verwendung von Trigrammen in einer Bloom-Filter-Suche ist meines Wissens einzigartig Durch den Suchcode wurde die Indexsuchzeit von mehreren Sekunden auf ~40 ms reduziert Die Verarbeitung von Endbenutzersuchen dauert immer noch etwa 300 ms Es verbesserte auch die Relevanz und Zuverlässigkeit der Suche Die Architektur ist einfacher geworden, denn der neue Index basiert auf einer einzigen Maschine und nicht auf vier Es verwendet Caddy als Reverse-Proxy und Redis als Level-2-Cache Der Index befindet sich vollständig im Arbeitsspeicher einer 5950x-CPU mit 16 Kernen und einer Maschine mit 128 GB RAM Es verarbeitet derzeit täglich fast eine Million Suchanfragen. Ich habe der Seite auch ein neues Aussehen und Gefühl gegeben, das viel besser ist als das, wie es vorher aussah Ich hatte eine tolle Zeit, es zu lernen und zu bauen

Am Montag, dem 21. November 2022, habe ich die DNS-Einträge für Search Code aktualisiert, um auf den neuen Search Code Server zu verweisen, der einen benutzerdefinierten implementierten Index ausführt, wodurch die Abhängigkeit von Sphinx/Manticore beendet wurde, um die Forschung voranzutreiben. Seit seiner Veröffentlichung habe ich beobachtet, dass es über eine Million Suchanfragen pro Tag mit einer gleitenden durchschnittlichen Ausführungszeit von etwa 40 ms für den Ersatzindex ausführt.

Irgendwann während der Abschaltungen im Jahr 2020, als ich die Unternehmensflaute kommentierte, sollte ich meinen eigenen benutzerdefinierten Index für den Suchcode erstellen. Einige antworteten aufmunternd, wenn jemand das könnte, dann ich. Obwohl ich ihr Vertrauen zu schätzen wusste, tat ich nichts, bis ich 2021 mit einem Begleiter auf eine Wanderung ging, wo ich nach ein paar Bier am Ende des Tages voller Zuversicht meinen Angriffsplan darlegte.

Ich fühlte mich eine Zeit lang wie ein Betrüger. Ich bekomme viele Fragen zur Codeindizierung und meine Antwort war immer, dass ich die Sphinx-Suche verwende. Vor kurzem hat sich das geändert, als ich dazu übergegangen bin, nach seinem gegabelten Mantikor zu suchen. Manticore ist ein großartiger Nachfolger des Sphinx und ich kann ihn wirklich empfehlen.

Durch die Verwendung der obigen Angaben lagere ich jedoch die Kernfunktionen des Suchcodes an Dritte aus, und ich bin fest davon überzeugt, dass Sie Ihre Kernkompetenz nicht auslagern sollten. Also dachte ich, ich sollte wirklich versuchen, es selbst zu tun. Außerdem wusste ich, dass ich diesen Prozess wirklich genießen würde, und so fing ich ein paar Tage später an zu arbeiten.

Das Ergebnis meiner Bemühungen kann auf searchcode.com eingesehen werden und sieht wie folgt aus.

searchcode newSuchcode neuSuchcode neu

Etwas mehr als ein Jahr Arbeit und jetzt kann ich darüber reden/schreiben. Ich betrachte dies als den Höhepunkt meiner bisherigen Entwicklungskarriere und bin sehr stolz auf meine Leistung. Fühlen Sie sich frei, weiter zu lesen, wenn Sie wissen möchten, wie ich es gemacht habe, was ich dachte usw. Das Folgende ist eine Sammlung meiner Gedanken und Entwicklungsideen.

Das Folgende sind meine Gedanken, die ich bei der Implementierung der Dinge behalten habe. Enthalten, damit ich etwas habe, auf das ich zurückblicken kann, und vielleicht findet es jemand nützlich. Es könnte ein bisschen weitschweifig sein, da vieles davon geschrieben wurde, während ich Sachen baute.

Das Problem der Quellcodeindizierung

Warum also einen eigenen Index erstellen? Warum sollte jemand darüber nachdenken, dies zu tun, wenn es so viele Projekte gibt, die dies für Sie tun können. Aus dem Gedächtnis haben wir Code für Lucene, Sphinx, Solr, Elasticsearch, Manticore, Xaipan, Gigablast, Bleve, Bludge, mg4j, mnoGoSearch … Sie haben die Idee. Da sind viele. Die meisten von ihnen konzentrieren sich jedoch auf Text und nicht auf Quellcode, und der Unterschied bei der Suche ist größer, als Sie vielleicht denken.

Es sollte auch beachtet werden, dass sehr große Engines wie Bing und Google ihre eigenen Indexierungs-Engines haben. Zum Teil, weil es Ihnen die Möglichkeit gibt, mehr Leistung aus dem System herauszuholen, da Sie wissen, wo Sie Abstriche machen oder Platz sparen können, vorausgesetzt, Sie verfügen über die erforderlichen Fähigkeiten oder Kenntnisse.

Ich denke, das Sprichwort "Die Sache mit der Neuerfindung des Rades ist, dass man ein rundes bekommen kann" trifft hier zu. Durch die Implementierung meiner eigenen Lösung konnte ich sicherstellen, dass ich etwas bekam, das im Rahmen meiner Anforderungen funktioniert.

Suchen Sie dann nach dem Quellcode. Ich habe darüber schon früher geschrieben, aber bedenken Sie Folgendes,

Ein Suchbegriff,

Dann überlege...

Erstellen eines benutzerdefinierten Code-Suchindex in Go für searchcode.com

Ich präsentiere etwas, das ich für einen einzigartigen Index zum Indizieren und Durchsuchen von Quellcode halte. Es kopiert Ideen aus der Bitfunnel-Implementierung von Bing, um einen sehr schnellen und speichereffizienten Trigram-Index für den Quellcode zu erstellen.

searchcode.com verwendet jetzt einen benutzerdefinierten Index, der wirklich von Ihnen geschrieben wurde Es indiziert 180 bis 200 Millionen Dokumente und 75 Milliarden Codezeilen Der Index arbeitet mit Bloomfiltern, die von einzelnen Dokumenttrigrammen gemeinsam genutzt werden Es leiht sich einige der grundlegenden Bitfunnel-Ideen aus, die in Microsofts Bing verwendet werden Die Verwendung von Trigrammen in einer Bloom-Filter-Suche ist meines Wissens einzigartig Durch den Suchcode wurde die Indexsuchzeit von mehreren Sekunden auf ~40 ms reduziert Die Verarbeitung von Endbenutzersuchen dauert immer noch etwa 300 ms Es verbesserte auch die Relevanz und Zuverlässigkeit der Suche Die Architektur ist einfacher geworden, denn der neue Index basiert auf einer einzigen Maschine und nicht auf vier Es verwendet Caddy als Reverse-Proxy und Redis als Level-2-Cache Der Index befindet sich vollständig im Arbeitsspeicher einer 5950x-CPU mit 16 Kernen und einer Maschine mit 128 GB RAM Es verarbeitet derzeit täglich fast eine Million Suchanfragen. Ich habe der Seite auch ein neues Aussehen und Gefühl gegeben, das viel besser ist als das, wie es vorher aussah Ich hatte eine tolle Zeit, es zu lernen und zu bauen

Am Montag, dem 21. November 2022, habe ich die DNS-Einträge für Search Code aktualisiert, um auf den neuen Search Code Server zu verweisen, der einen benutzerdefinierten implementierten Index ausführt, wodurch die Abhängigkeit von Sphinx/Manticore beendet wurde, um die Forschung voranzutreiben. Seit seiner Veröffentlichung habe ich beobachtet, dass es über eine Million Suchanfragen pro Tag mit einer gleitenden durchschnittlichen Ausführungszeit von etwa 40 ms für den Ersatzindex ausführt.

Irgendwann während der Abschaltungen im Jahr 2020, als ich die Unternehmensflaute kommentierte, sollte ich meinen eigenen benutzerdefinierten Index für den Suchcode erstellen. Einige antworteten aufmunternd, wenn jemand das könnte, dann ich. Obwohl ich ihr Vertrauen zu schätzen wusste, tat ich nichts, bis ich 2021 mit einem Begleiter auf eine Wanderung ging, wo ich nach ein paar Bier am Ende des Tages voller Zuversicht meinen Angriffsplan darlegte.

Ich fühlte mich eine Zeit lang wie ein Betrüger. Ich bekomme viele Fragen zur Codeindizierung und meine Antwort war immer, dass ich die Sphinx-Suche verwende. Vor kurzem hat sich das geändert, als ich dazu übergegangen bin, nach seinem gegabelten Mantikor zu suchen. Manticore ist ein großartiger Nachfolger des Sphinx und ich kann ihn wirklich empfehlen.

Durch die Verwendung der obigen Angaben lagere ich jedoch die Kernfunktionen des Suchcodes an Dritte aus, und ich bin fest davon überzeugt, dass Sie Ihre Kernkompetenz nicht auslagern sollten. Also dachte ich, ich sollte wirklich versuchen, es selbst zu tun. Außerdem wusste ich, dass ich diesen Prozess wirklich genießen würde, und so fing ich ein paar Tage später an zu arbeiten.

Das Ergebnis meiner Bemühungen kann auf searchcode.com eingesehen werden und sieht wie folgt aus.

searchcode newSuchcode neuSuchcode neu

Etwas mehr als ein Jahr Arbeit und jetzt kann ich darüber reden/schreiben. Ich betrachte dies als den Höhepunkt meiner bisherigen Entwicklungskarriere und bin sehr stolz auf meine Leistung. Fühlen Sie sich frei, weiter zu lesen, wenn Sie wissen möchten, wie ich es gemacht habe, was ich dachte usw. Das Folgende ist eine Sammlung meiner Gedanken und Entwicklungsideen.

Das Folgende sind meine Gedanken, die ich bei der Implementierung der Dinge behalten habe. Enthalten, damit ich etwas habe, auf das ich zurückblicken kann, und vielleicht findet es jemand nützlich. Es könnte ein bisschen weitschweifig sein, da vieles davon geschrieben wurde, während ich Sachen baute.

Das Problem der Quellcodeindizierung

Warum also einen eigenen Index erstellen? Warum sollte jemand darüber nachdenken, dies zu tun, wenn es so viele Projekte gibt, die dies für Sie tun können. Aus dem Gedächtnis haben wir Code für Lucene, Sphinx, Solr, Elasticsearch, Manticore, Xaipan, Gigablast, Bleve, Bludge, mg4j, mnoGoSearch … Sie haben die Idee. Da sind viele. Die meisten von ihnen konzentrieren sich jedoch auf Text und nicht auf Quellcode, und der Unterschied bei der Suche ist größer, als Sie vielleicht denken.

Es sollte auch beachtet werden, dass sehr große Engines wie Bing und Google ihre eigenen Indexierungs-Engines haben. Zum Teil, weil es Ihnen die Möglichkeit gibt, mehr Leistung aus dem System herauszuholen, da Sie wissen, wo Sie Abstriche machen oder Platz sparen können, vorausgesetzt, Sie verfügen über die erforderlichen Fähigkeiten oder Kenntnisse.

Ich denke, das Sprichwort "Die Sache mit der Neuerfindung des Rades ist, dass man ein rundes bekommen kann" trifft hier zu. Durch die Implementierung meiner eigenen Lösung konnte ich sicherstellen, dass ich etwas bekam, das im Rahmen meiner Anforderungen funktioniert.

Suchen Sie dann nach dem Quellcode. Ich habe darüber schon früher geschrieben, aber bedenken Sie Folgendes,

Ein Suchbegriff,

Dann überlege...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow