Transkript: Suchmaschinen
Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.
Ja, hallo liebe Hörerinnen und Hörer.
Willkommen zum Python Podcast in der heute 18.
Episode.
Heute geht es um die Suche.
Hier ist der Donik und neben ist der Jochen.
Ja, halli, hallo.
Wir sind wieder auf der Raumschiffbrücke heute.
Genau.
Erneut.
Schön hier.
Ja.
Genau, Volltextssuche, um es genau zu sagen.
Ja, ah oh, Volltextsuche, ja.
Ja.
Aber wollen wir das eigentlich oder ich meine, wir könnten einfach ganz normal starten, so mit News und Dings.
Ja, ja, genau.
Ich würde auch sagen, wir machen jetzt wie immer unsere kleine Einleitung.
Vielen Dank an unsere zahlreichen Hörer.
Wir haben tatsächlich mittlerweile einige Blog und dann die schönen Fragen, die uns immer erreichen.
Wir beantworten die immer gerne und versuchen immer, euch so schön wie möglich das zu erklären, was ihr gerne hören möchtet.
Also wenn ihr Fragen habt, Lob, Anregungen, Kommentare, hallo at python Podcast.de, schickt uns einfach eine Mail oder kommentiert fleißig auf unserer Seite.
Ja, News aus der Szene.
Heute ist der Erscheinungstag von Python 382.
Angeblich.
Ist noch nicht so nicht raus.
Wir haben gerade abends, es ist dunkel.
Genau.
Heute ist Rosenmontag übrigens auch.
Ja, ja, und das wird hier wahrscheinlich auch noch eine sehr Jacke-Veranstaltung.
Die sind unbeschadet heimgekommen, ja.
Nee, ich war auch heute einer der wenigen Leute, die irgendwie im Brot saßen und so, es war sehr angenehm, haben ein bisschen was geschafft gekriegt.
Ja, und da da eben immer, wenn du auf die Straße gehst, so aussieht, als wärst du schon verkleidet, ist das auch gar nicht groß aufgefallen.
Ja, ja, ja.
Horrorclown.
Kann ich empfehlen.
Sehr gut.
Ja, wir machen heute Volltext-Suche.
Und ja, nun ist aus der Szene, ist dir noch was eingefallen?
Hatten wir noch was Schönes?
Tatsächlich glaube ich eigentlich nicht.
War gar nicht so viel Jose, ne?
Europhizen war im Moment hin.
Ja, war nicht so.
Gehst du hin zur Europhizen?
Ja, ja, ja, ja.
Ja, war schön, cool.
Wir müssen das nur noch irgendwie mit Kindergarten und so geklären.
Den ja auch irgendwie Betriebsferien und so, aber ich eigentlich schon, ja.
Ja, das muss alleine.
Ich habe mir schon eine Wohnung organisiert.
Also, falls noch jemand eine WG sucht oder sowas, sagt mir Bescheid.
Ja, was gab's noch?
Es gab so einen tollen Tweet, hast du gezeigt von Armin Ronacher.
Das ist der Hauptdev, der Entwickler von Flas.
Ja, aber das wollte ich eigentlich später erst picken.
Ach, das sollst du picken.
Ja.
Ach, das ist ein Modul.
Nee, aber als.
Ich dachte, wir picken Module, Jochen.
Ja, heute nicht.
Oh Gott, jetzt alles dich hintereinander.
Ja, okay, dann gleich.
Jetzt entwickeln wir keine Module, dann machen wir das am Ende.
Ja.
Aber was wir tun könnten, wäre, wir könnten ja heute mal mit dieser Tradition, die wir jetzt schon seit einigen Episoden starten wollten, tatsächlich vielleicht mal anfangen und ein Modul aus der Standardbibliothek uns vornehmen.
Ja, gute Idee.
Und das nehmen wir Parslib.
Parslib, ja.
Genau.
Das immer wieder, wenn ich halt irgendwie in Code herumnavigiere und sehe dann irgendwo so Import US und dann halt OS Pass und so und dann machen Leute da Dinge, dann denke ich mir so, ach, es geht so viel schöner mit Parslib.
Also vielleicht nochmal kurz, was Parslip ist.
Parslib ist ein Wrapper oder ist das eine komplett neue Implementierung?
Das ist ein Modul aus der Standardbibliothek, ich weiß jetzt gar nicht.
Nee, das ist kein Wrapper um OSPath.
Nö, nö, das ist halt auch so ein bisschen, manchmal ist so ein bisschen unübersichtlich.
Es gibt einige Module in der Standardbibliothek, die halt so ein bisschen das gleiche machen.
Unter anderem halt eben OS Path und dann Shell Utils, also SH-Util macht auch so ein bisschen das gleiche, aber so ein bisschen eine andere Geschmacksrichtung.
Parselib macht ja jetzt auch nochmal das gleiche, aber auch wieder ein bisschen anders.
Ach ja.
Aber im Grunde denke ich, wenn man jetzt mit Pfaden irgendwie Dinge macht, dann ist Passlib das, was man eigentlich haben will.
Und das ist auch so richtig, ich glaube, das ist auch erst seit Python 3.4 oder so drin.
Ja.
Und auch, aber auch erst seit 3.6 so richtig schön.
Oder 3.7 sind auch nochmal interessante Dinge dazugekommen, glaube ich, ist Mount dazugekommen in 3.7.
Also nur in aktuelleren Python 3-Versionen.
Also man kann halt relativ schick irgendwelche Strings zu Verzeichnisnamen oder Dateinamen parsen und dann da Pfade, Pfadobjekte draus erstellen und dann einfach mit einem Slash dahinter dann Unterverzeichnisse wechseln oder iterieren über so Pfade und die ganzen schönen Listen zu anzeigen oder Content anzeigen, gucken, ist es ein Verzeichnis, das ist kein Verzeichnis, eine Datei.
Ja genau, das ist so.
Das Hauptfeature finde ich, dass man damit halt relativ einfach Pfade so hinschreiben kann, ohne jetzt irgendwie viel Boilerplate Code außen rumschreiben zu müssen.
Wenn man jetzt aufpassen, joinen und dann die Liste, das ist halt immer so ein bisschen, und jetzt kann man halt einfach, man schreibt halt einen Slash und dann macht dieser Operator sozusagen eine Verkettung der Namen, die man da.
Ja, soll man es aus dem Dateisystem eigentlich auch kennen und das genau.
Dann sieht das halt im Code fast genauso aus, als würde man es auf die Shell schreiben und das natürlich schon deutlich kompakter und sieht einfach, ja, man sieht, was passiert.
Das ist ein tolles Ding, aber halt auch solche Sachen wie so Convenience-Funktionen für Sachen, die man halt dauernd braucht.
Also sowas wie ich brauche jetzt ja irgendwie mal den Versionen des Dateinamens ohne Endung.
Also ohne irgendwie MP4 hinten dran oder MP4.
Oder auch mit, das geht auch.
Oder mit oder nur das Suffix oder so.
Solche Dinge braucht man ja dauernd.
Und dafür gibt es halt dann eben schon eingebaute Attribute, die man einfach so verwenden kann.
Ja, das fand ich auch angewendet.
Das ist halt total nett, genau.
Ich muss gestehen, hatte ich mit Pass angefangen, gab es das schon und deswegen habe ich OS-Pass nur ab und zu mal angesehen und gesagt, ist das hässlich dann gesehen.
Ach ja, okay, das gibt es jetzt Parslip.
Ja, ja, ja, ja.
Ich stolper fast täglich über Code, wo halt noch OS-Pass verwendet wird und nicht die Parslip insofern.
Auch ganz oft in Django ist das auch ganz oft drin in den Settings oder sowas, ja.
Ich bin jetzt einmal irgendwo drüber gestolpert, wo es nicht mir gelang, das zu entfernen.
Ich bin mir nicht sicher, ob das an meinen Fähigkeiten lag oder an der Implementierung.
Ja, die brach dann einfach durch, weil ich Passlip-Objekte genommen habe.
Ja, und wenn man das halt irgendwie anders gewohnt ist, dann gibt es unten auf der, wenn man die Dokumentation sich anguckt, nochmal eine Liste von, also wie man das früher mit OS-Pass gemacht hat und jetzt wie man es mit Parslib machen kann.
Tabelle und da findet man dann meistens schon die Funktion, die man sucht.
Stellen wir euch nicht schon uns.
Ja, genau.
Also genau, damit haben wir das tatsächlich mal gemacht, was wird immer noch geregelt.
Also wir wollen jetzt tatsächlich das Einzeltreifen auf der Klein hat.
Und wenn ihr irgendwie von unserem Podcast die Struktur irgendwie blöd findet, wann wir was erzählen, dann könnt ihr auch dazu gerne mal Feedback geben, wenn wir es irgendwie neu umsortieren wollen, wenn ihr immer zuerst die Picks haben wollt oder erstmal direkt das Thema, bevor wir irgendwas über News erzählen.
Ja, aber trotzdem, dann machen wir Volltextsuche weiter und ich werde dich löchern damit mit.
Oder wollen wir noch ganz kurz ein Meta-Ding, also ich überlege gerade, weil mich hatte diese, da gab es eine Mail, die wir fragen wollen, ob wir nicht Podcast, ob wir nicht mehr Dinge erklären könnten.
Ach so, stimmt.
Ja, ich kann das durchaus verstehen.
Also es ist halt viele Sachen, die man einfach so vor sich hin redet, nicht drüber nachdenkt, die zu erklären, dann wird es halt schnell unverständlich.
Aber auf der anderen Seite ist halt, glaube ich, schwierig.
Ich glaube, das ist.
Ja, so ein Trade-Off.
Einige Menschen, die kennen das halt schon alles und wenn man dann jeden Schnipsel erzählt, ist vielleicht uninteressant.
Dann wird es für die uninteressanter, ne?
Und die Frage, an wem wendet man sich dann irgendwie.
Wie Einsteiger wollen wir das Ganze machen?
Ja, das ist gar nicht so einfach.
Ich glaube, bestimmte Sachen muss man vielleicht selber nachgucken und man kann uns immer fragen, wenn man irgendwas nicht versteht.
Wir erklären das immer gerne nochmal und nehmen das auf in einer der Folgen.
Ich glaube, das ist vielleicht eine gute Idee.
Und ja, also tatsächlich, wenn uns irgendwas auffällt, versuchen wir es so tief wie möglich zu erklären.
Ja, aber das würde mich eben auch nochmal interessieren, wie das andere Leute sehen oder auch wie du das siehst, das weiß ich auch gar nicht.
Weil ich würde sagen, das ist ja eigentlich das Tolle an.
Aber ich komme drauf, weil letzte, ich höre ja auch noch viele andere Podcasts, ich höre zum Beispiel Philosophische Radio auf WDR5 oder die Radio Bissen.
Ich weiß jetzt gar nicht, auf welchem Sender, ich weiß ja nur, was Podcast geht.
Ich höre einen tollen Hockey-Podcast, Shout Hand News, falls jemand Eishockey macht.
Genau, und die sind der Meinung, dass sie da auch irgendwie Podcasts machen und man sagen, sie können das.
Aber das ist kein Podcast, sondern das hat halt irgendwie eine feste Zeitbegrenzung, ja.
Und dann am Schluss fangen wir auch um an, so das müssen wir jetzt noch schnell zu Ende.
Oder jetzt sind wir ja schon fast am Ende mit der Zeit, wo man sich denkt so, ja, warum eigentlich?
Ihr könnt ja auch eigentlich einfach weitererzählen.
Also da ist halt ein großer Unterschied und dann ist er auch ein Unterschied, dass die machen das nämlich so.
Die versuchen das immer irgendwie sozusagen möglichst einfach zu erklären und sie versuchen auch immer die Zuhörer mit einzubeziehen, was ich auch manchmal nicht so richtig super gelungen finde.
Die können die nicht irgendwie veröffentlichen auf der Seite, wann wir nächste Podcast-Folge aufnehmen, dann sind Anrufer zugelassen.
Genau, das macht natürlich.
Ich verstehe natürlich, dass es bei der Live-Sendung den 13 nochmal erhöht, ja, oder wenn man halt irgendwie auf Twitter nebenher drüber lässtern kann, was die gerade wieder von uns erzählen, das ist schon erhöht den Spaßfaktor deutlich.
Aber ich weiß nicht, ich glaube, das ist was anderes, als das ist dann halt eher so Radio oder Fernsehen oder aber nicht eben nicht Podcast, weil für mich Podcast ist eher so oder das, was ich daran mag, ist halt etwas, was man eben in diesen Massenmedienkontexten halt nicht kriegt.
Nämlich zum Beispiel, was mich eben bei so einem Thema wie jetzt Philosoph oder so eigentlich interessieren würde, wäre genau das, was wir versuchen jetzt im Bereich Python jetzt hier zu machen.
Nämlich Leute, die das irgendwie sowieso sich damit beschäftigen, die sich einfach mal so ein bisschen drüber unterhalten, was sie da so tun.
Und das gibt es halt für sowas wie Philosophie nicht.
Sondern da hast du halt immer einen Moderator und dann halt vielleicht einen Studiorest oder so.
Oh, es
gibt ja so einen philosophischen Zirkel in der Stadt.
Ja, vielleicht müsste man da, vielleicht müssen wir sie mal dahin gehen, keine Ahnung.
Aber und dann wird das irgendwie aufbereitet und dann ist da irgendwie so ein Konzept hin und dann will man bestimmte Punkte abarbeiten.
Aber ich finde das halt eigentlich überhaupt nicht interessant.
Und gerade dann immer wenn irgendwie so Zuhörergeschichten da mit reinkommen, denke ich mir immer so, jetzt war es gerade spannend, aber jetzt können sie da halt nicht weitermachen, weil entweder ist die Zeit vorbei oder irgendwie müssen sie nochmal auf ein anderes Ding eingehen.
Und sie geben sich halt auch mal sehr viel Mühe, das dann irgendwie so zu verpacken, dass es halt möglichst viele Leute erreichen kann.
Was ja auch nichts Schlechtes sein muss, aber ich meine, im Grunde, wenn man in einem Massenmedium ist, dann ist das natürlich natürlich das Ziel, irgendwie möglichst viele Leute zu erreichen.
Sonst müsste ich da nicht das irgendwie über Radiowellen irgendwie nach draußen senden.
Aber ist das eigentlich immer das, was man haben will?
Da bin ich mir nämlich gar nicht so sicher, weil.
Also wir haben jetzt einen kleinen Exkurs, Jochen redet Nika über Podcast.
Sorry, ist ja gerade nur so, weil ich meine, man kann ja auch auf andere Dinge optimieren, ja.
Mal so zum Beispiel, wie nützlich ist das für die Leute, die das zuhören?
Es können ja weniger Leute hören, aber für die kann das ja nützlicher sein, als wenn, aber das geht jetzt eben bei einer Radiosendung nicht.
Wenn ich jetzt eine Radiosendung mache und sende das halt irgendwie über den Sendemast übers Land, dann, und das ist für 100 Leute sehr, sehr relevant und für alle anderen, die das halt trotzdem abkriegen, super langweilig.
Ja, also wir machen ja einen Podcast und ich hoffe, dass alle unsere Hörer auch tatsächlich wegen Python und hier sind und vielleicht auch, weil sie Lust drauf haben oder warum auch immer.
Also keine Ahnung, kann auch sein, dass ihr unsere Stimme so schön findet.
Zum Einschlafen.
Ja, das ist eigentlich gar nicht so schlechte Idee.
Nur nicht beim Autofahren und Eschlafen kommen.
Aber naja.
Aber ja, also ich finde, das ist halt etwas, was oder überhaupt bei Internetgeschichten finde ich das immer super, dass man das ja eigentlich tun kann mal.
Man kann ja jetzt einfach sagen, okay, ist mir egal, muss es nicht für jeden relevant, sondern für nur ein paar Leute.
Ja, aber ich glaube, weil wir eigentlich mit der Frage eingestiegen sind, wie viel wir tief erklären.
Also erklärt uns doch mal gerne mit, wie viel ihr denn erklärt haben wollt, ob euch das zu viel Erklärung ist, zu wenig Erklärung ist.
Und ja, ich glaube, wenn ihr Begriffsfragen habt, wissen wollt, was CSS ist, Cascading Style Sheets im Übrigen, da war eine Frage, dann erklären wir euch das gerne nochmal oder ihr schaut das dann kurz nach, also wie man dann das Internet betrachtbar macht.
Ja, Jochen, aber jetzt hast du so viel über Meta geredet, dass unsere Absprungquote wahrscheinlich wieder in Höhen geschnallt ist.
Wir fangen jetzt an mit Volltextsuche.
Ja, Volltextsuche, voll gut.
Also was ist das überhaupt, weil Volltextsuche?
Also wir wollen ja ganz Basis anfangen und erklären, was macht eine Volltext oder warum heißt es Volltext und was es daran suche?
Also habe ich einen Text und ich gebe eine Suchmaske einen Begriff ein und der spuckt mir aus dem gesamten Text alle Treffer aus oder was ist das?
Ja, nee, also ich meine, das ist auch ein Art Suchproblem, sozusagen, wenn man versucht, in einem Text irgendwas zu finden.
Aber Volltextsuche willest du da viele Texte finden.
Ja, also der entscheidende Unterschied ist eigentlich, dass man halt Dokumente hat bei einer Vollteilssuchmaschine.
Indizierbare Dokumente, also deren Inhalt du kennst und dann möchtest du durch eine Masse von Dokumenten bestimmte Stichworte suchen.
Ja, also man hat eine Anfrage oder eine Query und dann möchte man halt die Sachen finden, die da relevant sind.
Playpad, hast du benutzt, damit du deine Hausarbeit nicht zweimal schreiben musst oder einfach die nehmen kannst, die du findest.
Ein Ja, ich habe auch überlegt, wie man das am besten, ich weiß nicht, ob die Analogie oder wie weit die trägt, aber wie man sich das vorstellen kann, ist halt wie bei einem Index in einem Buch.
Denke ich.
Ein Glossar.
Nee, nee, nicht Glossar, erklärt ja die Begriff, aber einen Index tatsächlich gibt es oft in Büchern.
Ja, okay, also geht es ja noch welchem Hit, welche Leile.
Das ist einfach sozusagen eine Liste der Wörter und dann auf welchen Seiten die Wörter vorkommen.
Also das ist immer das Wort.
Ich habe das sogar einmal in der Kombination gesehen, glaube ich, also ein Glossar kombiniert mit der Erklärung und dann die Hinweise, wo es auftaucht.
Sehr schöne Sache.
Kann man wahrscheinlich auch machen, aber genau, und dann hast du halt eine komma separierte Liste der Seiten, auf denen das vorkommt.
Du hast jetzt auf den Volltextsuche-Dingswertungsfall übertragen, wäre das halt so, dass die Seiten in dem Buch wären halt die Dokumente, die initiiert werden und der Index in dem Buch ist tatsächlich dann halt so etwas wie ein Volltextsuchindex, den man auch sehr ähnlich zu dem, was man dann tatsächlich auch verwendet.
Und was hat das denn mit Python zu tun, Jochen?
Ja, also das ist eine gute Frage.
Doch, hat es aber, weil man oft ja auch Suchmaschinen irgendwie verwendet von Python aus oder halt ab und zu auch mal Suchmaschinen in Python implementiert.
Meiner Ansicht nach implementiert dann viel zu wenig Suchmaschinen, sind viel zu wenig Volltext-Suchmaschinen in Python implementiert.
Schnüff, aber so ist es halt.
Aber zumindest, dass man die irgendwie ansprechen muss und dann da irgendwas mit den Ergebnissen macht, das hat man ja relativ oft.
Welche hatten denn Suchmaschinen?
Ich muss erstmal Beispiele geben für Volltext-Suchmaschinen, die man vielleicht kennt oder auch nicht, oder?
Also da gibt es halt unterschiedliche, ja, es gibt natürlich die große Google, die Alvisnimmülhalte, die Alter kennen, vielleicht mit den entsprechenden Vorgängern, so was ich nicht, Excite, Alta Vista, Hotbot.
Ach, Alta Vista, das waren noch Zeiten.
Ja.
Und das sind halt schon relativ fortgeschrittene Dinge.
Also gerade Google ist halt, oder auch die anderen modernen, die es halt gibt, Bing, oder was gibt es da noch?
Gibt es eigentlich.
Du hast ein Microsoft von der Band erneut.
Die haben aber immer noch kein Contract leider bekommen.
Oder A9 von Amazon, wo auch einer der Experten-Tode, Udi Member hat da lange.
Also ja, also die Dinger sind halt relativ fortgeschritten und haben halt, sind halt relativ einfach gestartet.
Es gibt das Ganze jetzt auch als Software, sozusagen Open Source Software, die man irgendwie verwenden kann oder halt auch es gibt kommerzielle Software, die das macht.
Wobei ich denke, dass heutzutage wahrscheinlich die allermeisten irgendwas Open Source-Mäßiges verwenden werden, wenn sie das denn jetzt selber haben wollen für ihre Webseite zum Beispiel.
Also das ist, denke ich, ein ganz häufiger Anwendungsfall, dass du halt eine Webseite hast und möchtest halt eine Suchfunktionalität anbieten.
Und ja, dann muss es halt irgendwie irgendwo passieren.
Und das, was es da, das, was da sozusagen der Platzsearch ist, ist eine Java-Bibliothek namens Lucine.
Ja.
Das ist von Doug Cutting geschrieben worden.
Der hat damit angefangen, 1997 oder so, der hat irgendwie mal gearbeitet bei Excite, meine ich.
Und hat dann irgendwann hat er oder so, da habe ich irgendwo mal im Talk gehört, hat er so, ja, so, das ist also 97, da hat er so das Gefühl, die Dotcom-Bubble, die platzt jetzt demnächst.
So, hat noch ein bisschen gedauert, aber da war gar nicht so schlecht.
Und man hat sich dann sozusagen einen Teil der Woche, ich weiß nicht, ein oder zwei Tage Homeoffice oder auf Homeoffice setzen lassen und dann an eben der neuen Suchmaschine gebastelt.
Und als dann Exite tatsächlich irgendwie so ein bisschen die Ohren angelegt hat, hat er das halt dann Open Source, äh Open Source Geschichte überführt, auch da ohne groß drüber nachzudenken, was man da jetzt macht.
Er hat, glaube ich, die erste Version sogar irgendwie unter der GPL, weil er dachte, naja gut, wenn man Open Source macht, macht man halt GPL veröffentlicht.
Das war aber dann nicht so cool.
Leute haben sich beschwert, dass sie das dann nicht so richtig verwenden können und so.
Und darauf ist auch, dass die Apache Software Foundation hat gerade angefangen, irgendwie dann so unter ihrem Schirm Projekte aufzunehmen und denen so ein bisschen Struktur zu geben.
Und dabei, man das dann noch nie gemacht hat, weiß man ja nicht genau, was man da alles machen muss.
Mailinglisten und wie organisiert man diese ganze Entwicklungsgeschichte überhaupt.
Und ist dann irgendwie mit dem Lucinen-Projekt dann da unter diesen Apache-Schirm der Apache Software Foundation gekommen, hat dann auch die Apache License übernommen und er meinte, seitdem hat sich nie wieder jemand über die Lizenz beschwert und es funktioniert.
Also es ist halt eine sehr liberale Lizenz, so PC-artig, MIT-artig.
Ja, Lizenzen müssen wir ja auch nochmal neu entkennen.
Ja.
Aber im Grunde kann man dann mehr oder weniger machen, was man will und ja, halt auch im kommerziellen Kontext verwenden oder in Software, die man halt irgendwo hinschippt.
Das ging jetzt mit der GPL zum Beispiel eher nicht.
Ja.
Und dann ist diese Bibliothek relativ erfolgreich geworden.
Und heute ist es halt das Ding, was alle verwenden, und eigentlich das Ding, was unter allen bekannten Suchmaschinen, Open Source-Suchmaschinen-Implementationen irgendwie darunter liegt.
Also die beiden größten Dinger, die man heute so kennt, sind halt Solar und Elasticsearch.
Ja, und das Spice-Lucine.
Man kann das auch aus Python heraus direkt verwenden mit PyLucine.
Aber das ist so ein bisschen eklig.
Also das ist halt das in das macht halt direkt eine Anbindung an Java und.
Hört sich echt komisch an.
Ja, also geht schon, aber will man vielleicht auch nicht verwenden.
Eher, ist wahrscheinlich die richtige Art, wo man das dann trennt, irgendwie eine API oder so.
Und das machen Solar und Elasticsearch auch so.
Also meistens hast du dann Elastic Search oder Solar, vielleicht SolarCloud auf irgendeinem Cluster laufen oder was nicht.
Und auf dein Hadoop-Cluster am besten.
Und dann connectest du dahin und stellst da deine Suchqueries an Fragen.
Ja, genau, so sieht es halt irgendwie momentan aus.
Aber das ist natürlich, also okay, es ist nicht, es ist das Verbreiteste, das, was irgendwie alle die meisten Leute verwenden, ist aber nicht das Einzige.
Es gibt noch eine Menge andere Dinge und andere Software, die das halt auch kann.
Andere Open Source Supermaschinen werden sowas wie, es gibt noch Xapien, obwohl ich weiß nicht, ob es das tatsächlich noch gibt.
Das war irgendwas in C<unk>, glaube ich, nicht mehr relevant.
Sphinx gibt es noch.
Das ist insofern ganz halbwegs relevant, noch, weil das halt eine enge Verbindung zu MySQL hat.
Und da gibt es halt irgendwie eine.
Heißt das MariaDB.
Oder genau, wenn man heute MySQL sagt, dann meint man eigentlich mal MariaDB.
Und da gibt es halt irgendwie relativ ausgefuchste Mechanismen, wie man das halt ineinander integriert und halt, wenn man die eingebaute Volltextsuche von MySQL nicht mehr verwenden will oder wenn man da rausgewachsen ist, dann kann man irgendwie relativ leicht Zwings dran bauen.
Ja, ähm.
Ja, du da musst du gleich noch ein bisschen mehr zu sagen, also diese Architektur.
Also wenn du sagst, man packt das jetzt einfach so mal eben kurz in einen Hadoop, äh, klammer auf was bitte ist denn das?
Knapp da rein.
Und was das dann überhaupt, wo die Dokumente liegen und wie das dann überhaupt so richtig funktioniert und so.
Ja.
Ich überlege gerade, ach genau, es gibt eine in Python implementierte Volltext-Suchmaschine namens Wuchsch.
Whoosch, die sich auch sehr stark an Lysine irgendwie so von der Struktur intern anlehnt, aber ist halt in Python geschrieben, ist nicht so schnell, alles ein bisschen langsam.
Aber kann man auch mal benutzen, ist irgendwie ganz nett.
Und dann, also lass mal überlegen, gibt es noch irgendwas, was Volltext suche kann, was ich jetzt, also was das irgendwie offiziell hauptsächlich tut und was ich noch nicht genannt habe.
Ja, also wenn jemand noch was einfällt.
Und dann gibt es halt noch Volltextsuchfeatures in den meisten Datenbanken.
Und das natürlich auch nett, weil meistens hat man ja eh die Daten, in denen man irgendwas sucht, sowieso schon in der Datenbank liegen.
Und eben, wenn man sowas wie Elasticsearch, Solar oder so, dann muss man halt irgendwie die Daten aus der Datenbank da reinkriegen.
Und wenn man jetzt ein Suchergebnis bekommt von denen, dann muss man irgendwie wieder zur Datenbank und dann nochmal wieder andere Informationen rausholen.
Das ist so ein bisschen umständlich.
Das ist ja eigentlich schön, wenn das direkt in der Datenbank drin wäre.
Und ja, die meisten Datenbanken bieten da halt auch Geschichten, wobei das halt unterschiedlich fertig oder unterschiedlich komplettes Featureset ist.
Postgres hat relativ viel Volltext-Fähigkeiten.
SQLite hat relativ viel, das ist auch sehr, sehr interessant.
MySQL ist nicht so, hat nicht so ganz so viele.
Aber so ein bisschen was geht auf jeden Fall auch.
Ja, und das ist auch, also ehrlich gesagt, das ist was, was ich präferieren würde momentan, also wenn man gerade wenn man anfängt, dann lässt man das eher die Datenbank machen.
Dann macht man nicht, fängt man nicht damit an, direkt irgendwie einen Elasticsearch daneben zu stellen.
Dann macht man das auf welcher Größe oder welches Suchvolumen geht es da oder
das kann man so schwer beantworten.
Also, aber
weil meine Postgres jetzt auf 0, nix mehr die Antwort auf meine Frage geben kann.
Das heißt, ich bräuchte schon ein Dokumentenarchiv, was ich irgendwo hinlege mit mehreren hunderttausend Dokumenten, durch die ich jetzt durchiterieren müsste bei der Suche, um zu finden, was es da so gibt.
Und da muss dann ein Luzin drauf springen, damit es da noch einigermaßen performant Ergebnisse rausbekommt.
Nee, das ist auch, also ich würde eher sowas sagen wie, es hängt halt von der Maschine auch ab.
Also wenn, sobald was halt in Postgres relativ schnell relativ groß wird, sind halt die Indizes.
Also super optimal sind die halt nicht.
Also, da ist schon einiges optimiert, aber die werden halt relativ schnell relativ groß.
Und wenn die zum Beispiel so groß sind, dass sie nicht mehr in Hauptspeicher passen, dann hat man ein Problem.
Und das geht wahrscheinlich dann mit Lisiden oder beziehungsweise halt Solar Cloud oder Elasticsearch oder so dann besser.
Aber da ist man schon bei wirklich vielen, vielen Dokumenten wahrscheinlich.
Wie viele Hauptspeicher hat man denn dann, den man braucht für wie viel Dokumentengröße?
Hast du da so Werte?
Nee, weiß ich nicht.
Aber keine Ahnung, kann sein, dass kommen wir halt auch darauf an, wie groß die Dokumente sind.
Aber ich meine, heutige Datenbanken haben viele Hauptspeicher und bis man da irgendwie, also ich weiß nicht, wie oft ich einen Volltextindex gesehen habe, der größer als ein paar Gigabyte war, das kommt jetzt gar nicht so oft vor, selbst wenn du Millionen Dokument hast, also ist es, glaube ich, nicht so oft, dass einem das sofort auf den Fuß fällt, sondern wenn man das Problem bekommt, dann hat man.
Das heißt, mit den neuen Maschinen, wenn man da eine größere Maschine hinstellt, sollte das auch mit dem Indexieren von Postgres dann mit 64 Gig über mehrere Millionen Dokumente aufhalten.
Ja, ja, ja, ja, auf jeden Fall, auf jeden Fall.
Und ja, genau, es kann auch einen interessanten, es gibt noch einigen Sombo DB oder so heißt das, glaube ich.
Ich habe es noch nicht verwendet.
Da kann man dann auch das direkt in die Datenbank integrieren, sodass man halt nur die Anfrage an die Datenbank stellt und die dann halt, weil man ja kann auch Plugins für Postgres und so schreiben, die macht dann halt eine Anfrage auf irgendwie ein Elasticsearch Cluster oder so.
Sodass man halt von der Applikationsseite aus gar nicht merkt, dass man inzwischen die Suchfunktionalität halt irgendwie woanders hin ausgelagert hat, was natürlich auch ganz praktisch wäre.
Also es gibt ja eine ganze Menge Dinge, die man tun kann, aber ich sag mal, für den Hausgebrauch und für die allermeisten Webseiten da draußen dürfte das, was in den Datenbanken eingebaut ist, schon eher reichen.
Und ich denke auch nicht, dass das wirklich das ist, wo die meisten Probleme kriegen.
Die meisten Leute kriegen nicht sofort Probleme mit der Skalierung, sondern eher bei so grundsätzlichen Fragestellungen.
Und das ist auch, also das sind halt.
Was sind grundsätzliche Fragestellen?
Ja, also zum Beispiel, wie macht man das jetzt eigentlich, wenn man eine Suchmaske irgendwie auf einer Webseite hat?
Was ist eigentlich, wie geht das mit der Relevanz?
Also wie kriege ich das eigentlich raus, ob da irgendwie gute Ergebnisse kommen, wie mache ich das?
Und da ist auch leider die Antwort, es hängt davon ab und es ist je nach Anwendungsfall sehr unterschiedlich.
Okay, jetzt wird es interessant.
Also ich möchte suchen, auch Ranken, ja.
Und das heißt, die Treffer Quote erhöhen.
Die Wahrscheinlichkeit, dass das Dokument dem entspricht, was ich gerade haben möchte.
Genau, wenn Leute da irgendwas eingeben, irgendeine Query eingeben, dann möchtest du, dass sie halt normalerweise, oder dass sie halt in möglichst vielen Fällen halt irgendwie relevante Ergebnisse haben.
Ja, okay.
Und wie das funktioniert, ist natürlich jetzt sehr spannend.
Ja.
Also, das haben wir, glaube ich, noch gar nicht.
Also wie so ein Index funktioniert, ist halt im Grunde, wenn ich mir vorstelle, das wäre jetzt eine, ich hätte jetzt eben dieses Buch mit dem Index hinten drin und ich würde jetzt wissen wollen, okay, wo kommt denn das Wort, was könnte ich denn für ein Wort nehmen?
Keyword.
Keyword und Python.
Und Python, ja, wo kommt denn das überall vor?
Und ich hätte gerne alle Seiten, auf denen das vorkommt.
Dann gehe ich einfach in den Index, nehme halt, suche halt das Wort Keyword, nehme die Seiten, die Nummern, packe das in ein Set und nehme das gleiche Set der Seiten von Python.
Und jetzt kann ich da halt zwei Dinge machen.
Ich könnte es entweder schneiden, könnte halt sagen, irgendwie, ich hätte gern alle Seiten, in denen beides vorkommt, oder sozusagen, also die Schnittmenge der beiden Mengen und oder ich könnte sagen, ich nehme die Vereinigung, also entweder das ist, wo Python drin vorkommt oder wo Keyword drin vorkommt, die Seiten hätte ich gerne und kriegt dann einfach alle.
Und das ist ja auch das, was man sozusagen in, ich glaube, Google hat dann eine Syntax für, das ist übrigens auch bei Postgres, kann man die Syntax, die Google verwendet, TS, Two-Query, irgendwas, to-Web-Query, ach, ich weiß nicht mehr, wie die Postgrenz-Funktion heißt, der übergibt man einfach diesen Query-String, den man bekommen hat, und dann macht die daraus eine Anfrage nach der gleichen Logik, sodass man halt auch und oder oder verwenden kann und so.
Ja, und genau, das ist halt im Grunde das, was halt so eine Suchmaschine macht.
Das Problem ist jetzt natürlich, die Seiten, wie auch immer, wenn man die jetzt bekommen hat, ob man die Mengen vereinigt oder geschnitten hat, man hat jetzt noch keine Reihenfolge der Seiten irgendwie.
Und die Frage wäre halt, wie berechnet man die aus und das, was halt so schon immer gemacht wird und
zählen, absolute Zahl sortieren.
Kann man und könnte man auch machen, ja.
Also das, was halt, äh, was halt schon, was normalerweise immer so für Scoring-Ranking verwendet wird, ist halt TF-IDF, das hatten wir glaube ich auch schon ein paar Mal, ist halt einfach der, die Query wird halt in einen TF-IDF-Vektor verwandelt und sozusagen die Frage.
Also außer Leute, die davon schon Ahnung haben, hat das jetzt niemand verstanden, deswegen musst du nochmal kurz erklären, was das denn überhaupt ist.
TF-IDF ist Term-Frequency mal Inverse Document Frequency und das legt sozusagen Gewichte fest für die Tokens, also die Word-Teil aus deiner Query für Keyword und für Python jetzt in unserem Beispielfall.
Und ja, das ist halt, ich weiß nicht genau, ob man genau erklären muss, wie das ausgerechnet wird.
Also Time-Frequenz wäre halt sozusagen auf dieses Seitenbeispiel übertragen, wie ist die Frequenz von dem Wort Python zum Beispiel auf dieser Seite.
Das heißt, ich zähle, wie oft Python auf der Seite vorkommt und teile das durch die Anzahl aller Worte auf der Seite.
Da weiß ich halt, wie viel Prozent der Worte auf dieser Seite sind halt Python.
Das ist die Time-Frequenz.
Und multipliziere das mit der Inverse Document Frequency, das ist halt sozusagen, in wie viele Seiten kommt denn dieses Wort überhaupt vor?
Ein Maß dafür.
Und je weniger das vorkommt, desto höher ist die Inverse Document Frequency.
Und desto charakteristischer ist das Wort im Grunde.
Für das, was da gerade steht.
Ja, genau.
Das heißt, du weißt nämlich genau, wenn das hoch ist, auf diesem Abschnitt geht es tatsächlich jetzt um Python und es wird nicht irgendwie nur als Seitenkommentar mal kurz erwähnt oder als kurz.
Genau, genau, also Artikel sind halt so ein Beispiel für Sachen, die, also der, die das, das kommt halt auf jeder Seite vor.
Ja, okay, Stopword.
Daher ist es halt einfach nicht so relevant, weil Adverse Document Frequency davon wäre halt sehr, sehr niedrig, weil, naja, es kommt halt überall vor.
Das heißt, ja.
Jetzt multipliziere ich diese beiden Teile, also einmal, wie oft kommt das Wort auf der Seite vor, mit wie wichtig ist das üblicherweise oder wie charakteristisch ist das.
Und das Ergebnis ist halt sozusagen ein Maß dafür, dass, also Worte, die wenig vorkommen oder sehr charakteristisch sind, aber sehr oft vorkommen, sind halt viel wichtiger als Worte, die überhaupt nicht charakteristisch sind, weil sie überall vorkommen.
Also der, die das, ist halt, die kriegen halt sehr niedrige Gewichte und Worte, die halt sehr spezifisch sind, die kriegen halt sehr hohe Gewichte.
Und das macht man jetzt auch mit der Query und macht das auch nochmal mit allen Seiten sozusagen und dann multipliziert man das miteinander.
Also die Cursinus ist uns.
Das heißt, man muss halt tatsächlich genau diese Dinge bilden oder bauen für jeden einzelnen Textbaustein, den man untersuchen möchte.
Ja, man muss da gar nicht so viel machen.
Tatsächlich, also das Bauen der Listen, in welchen Dokumenten welches Wort vorkommt, ist halt eigentlich das, was man hauptsächlich tut, wenn man einen Index baut.
Diese ganzen Geschichten, wie oft kommt das Wort jetzt wovor und wie das speichert man auch in dem Index, aber das ist eigentlich nicht so schlimm.
Das geht eigentlich relativ einfach.
Und dann am Schluss hat man diese ganzen Informationen auch die Texte nicht mehr, sondern man kann halt sozusagen aus dem, was man im Index stehen hat, plus der Query halt diese ganzen Sachen ausrechnen.
Okay.
Du machst irgendwas bei einem Cosinus-Distanz.
Ja, ja, genau.
Genau, wenn ich jetzt zwei Vektoren habe, dann ist die Cosinus-Distanz dazwischen einfach nur der Winkel, also der Cosinus des Winkels zwischen den beiden Vektoren.
Also jetzt nochmal kurz an, der Vektor ist tatsächlich dann die Information darüber, auf welchen Seiten wie viel Information über das gesuchte Wort Python oder Keyword steht.
Ja, also die Gewichte sind jetzt sozusagen die Werte in dem Vektor und können halt niedriger oder höher sein.
Das wird immer normiert auf, die Vektoren werden immer normiert auf 1, auf eine Länge 1 sozusagen.
Und der Anteil von einem Wort, das halt wichtig ist, ist halt dann einfach höher als von Worten, die nicht so wichtig sind.
Und die länger der Vektor, man normiert auch deswegen, damit halt längere Vektoren nicht einen Vorteil haben, ja.
Oder das halt längere, wenn du das nicht normieren würdest, dann würden Seiten, auf denen viele Worte stehen oder Dokumente, die halt sehr, sehr lang sind, würden halt viel relevanter bei vielen Suchabfragen sein, einfach weil die halt auch viel mehr Sachen matchen.
Daher normiert man das halt auf eine Einheitslänge, sodass halt dann, wenn ein Dokument sehr lang ist, kriegen die einzelnen Wort halt weniger Gewicht.
Und ja, dann wird es halt vergleichbar.
Und ja, also im Grunde ist das eben relativ einfach.
Also diese TF-E, DF-Distanz ist halt nichts weiter als der Kosinus zwischen dem Winkel der beiden Vektoren.
Und das klingt jetzt auch irgendwie kompliziert.
Tatsächlich ist es so, es ist halt super einfach auszurechnen, weil das ist einfach nur das Skalarprodukt der Vektoren.
Und das wiederum ist super einfach auszurechnen, also dieser Vektorraum, in dem diese Operationen stattfinden, wenn man jetzt sozusagen jedem Wort eine Dimension zuordnet.
Texte, also wenn man jetzt einen Dokumentkorpus nimmt, ganz viele Dokumente, dann kann es sein, dass da so ein paar 10.000 Wörter drin vorkommen.
Oder vielleicht, wenn man jetzt, also vielleicht auch ein paar hunderttausend, also und man hat jetzt sozusagen für jedes Wort eine Dimension, dann klingt das irgendwie alles ganz schrecklich.
Wenn man sagt, ein 100.000-dimensionaler Vektorraum ist ja schwer vorzustellen und dann daran irgendwie winkel, uh, was soll denn das sein?
Aber eigentlich ist es halt total blöd.
Einfach, weil das Schöne daran ist, oder das ist der Grund, warum er das macht, ist, ein Skalarprodukt an der Stelle ist halt, wenn das so Spaß ist, also die meisten Worte kommen mir in den meisten Texten gar nicht vor.
Das heißt, wenn ich einen Dokumentvektor habe, dann ist der an den allermeisten Stellen null.
Und alle Dinge, die null sind, die muss ich mir beim Skalarprodukt gar nicht angucken, wenn irgendwas multipliziert wird, wo eine Null drin ist, dann ist es ja sofort auch wieder null.
Das heißt.
Kann ich das einfach mal nachrechnen, bitte?
Das heißt, die Rechenoperation ist halt, ich gehe durch jedes Ding in der Query, ja, also nur durch die, die gesetzt sind, das sind ja meistens nur zwei, drei Worte.
Und gucke dann, existiert im Index dafür Seiten, auf denen das vorkommt.
Und das war's.
Mehr muss ich nicht machen.
Und damit habe ich ja schon sozusagen alle, wo ich überhaupt ein Skalarprodukt ausrechnen kann, gefunden.
Und jetzt muss ich nur noch ein paar andere statistische Werte haben, um das halt wirklich ausrechnen zu können.
Und das ist halt, dann ist es halt eine total einfache Operation.
Also es ist halt.
Weißt du, welche anderen statistischen Werte du ja jetzt noch haben möchtest zum eigentlichen Ranken?
Äh.
Na, tatsächlich müsste man wahrscheinlich noch an jedem, also die Dinge im Index heißen dann Posting Listen, dann müsste man wahrscheinlich noch irgendwie den TF-EDF-Wert tatsächlich, also ich weiß es ehrlich gesagt nicht.
Lücine macht das, ich weiß gar nicht, was Lysine da speichert, das speichert noch ein paar andere Sachen.
Ich würde sagen, einen TF-EDF-Wert braucht man vielleicht.
Also eigentlich, also ich glaube, Lucine und so, die machen das so, dass sie das auch erst ausrechnen, wenn die Query kommt.
Aber was es genau ist, weiß ich jetzt auch nicht mehr.
Also man kann das Ganze auch leicht und naiv implementieren in Python.
Man kann einfach für diese Posting-Listen, das sind sozusagen die Listen der Seiten, auf denen irgendwas vorkommt oder die IDs der Dokumente, die packt man einfach in ein Set.
Und indizieren bedeutet einfach nur Text, die Dokumente zu tokenisieren und dann für jedes Token sozusagen einen Eintrag mit der ID des Dokuments in die Postingliste zu tun.
Posting-Liste, so heißt es im Allgemeinen, aber in unserem Fall wäre das jetzt, wenn man jetzt sozusagen als Datenstruktur dafür Sets nehmen würde, Sets und dann kannst du halt hinterher, wenn eine Query kommt, irgendwie genau das machen, kannst halt irgendwie Schnittmenge und Vereinigungsmenge bilden, je nachdem, ob du deine Query mit AND oder OR verknüpfen willst.
Und ja, kriegst du, kriegst damit schon mal was raus und kannst halt auch, wenn du jetzt die TF-IDF-Werte noch mitgespeichert hast, kannst du auch einfach die Kursinusistanz ausrechnen.
Und hast dann schon im Grunde das implementiert, was eine Suchmaschine so tut.
Das geht wahrscheinlich in 30 Zeilen-Python oder sowas.
Ja, ja, wir lieben keinen.
Also das ist das geht relativ einfach, denke ich mal.
Und es ist auch mit, ich habe es mit Sets auch schon mal ausprobiert, das ist auch ziemlich schnell.
Das, was an Sets ein bisschen doof ist, deswegen macht man das auch dann tatsächlich, wenn man jetzt eine Suchmaschine implementiert, nicht so ist, dass die halt sehr, sehr viele Hauptspeicher verbrauchen.
Und überhaupt, man muss natürlich alles, was man jetzt in, wenn man es in Python-Set hat, muss man es im Hauptspeicher halten, weil, naja, es ist halt eben keine Datenstruktur, die irgendwie auf der Platte liegen kann.
Ja, während jetzt ein Lucinen-Index ist ein Ding, das eigentlich auf der Platte liegt und das skaliert, also das kann halt auch größer als Hauptspeicher werden, ist gar kein Problem.
Und das ist so gebaut, dass das maximal performant ist, wenn Sachen von der Platte auch gelesen werden und so.
Und es ist, äh, das sind schon einige schöne Tricks dabei.
Und aber tatsächlich, wenn man das jetzt einfach so implementieren möchte, kann man das mit Sets durchaus mal machen.
Was dann die großen Suchmaschinen machen und weswegen das Ding auch Postinglist heißt, ist, dass man das eben nicht in einem Set hält, sondern in einer Liste, die sortiert ist.
Sozusagen, wo die, wo eben die Dokument-IDs oder jetzt im Beispiel Seitenzahlen, die werden halt einfach sortiert.
Und dann speichert man nicht die Seitenzahlen selber oder die IDs selber, sondern man speichert nur die Differenz dazwischen.
Weil die Differenzen zwischen den IDs sind halt viel kleiner.
Und dann macht man etwas ganz fieses, das nennt sich Variable White Encoding.
Schon wieder so ein Zauberwort, ja.
Und das bedeutet halt, dass du diese normalerweise in C oder so, wenn du dir jetzt ein Array hast, ja, dann müssen ja alle Werte in dem Array den gleichen Typ haben.
Und das macht man halt nicht so, um Platz zu sparen, sondern man, äh, deswegen man nimmt einfach üblicherweise dann Characters, also byte-mäßige Dinge.
Ich weiß gar nicht, also in C weiß ich jetzt, wie es geht, ich habe aber mal sowas tatsächlich mal selber implementiert.
Fast Suchmaschinen geschrieben aus Versehen.
Aber ich weiß gar nicht, wie man das in Java oder so macht.
Keine Ahnung.
Geht bestimmt auch irgendwie und definiert sich die Datenstruktur selber.
Also es ist nicht so, dass man sagt, okay, das sind jetzt alles Integer-Werte oder so, sondern man sagt, okay, das ist einfach nur ein Array von Charakteren.
Und wie viele Bytes ich sozusagen pro, oder wie viel Bit ich pro Eintrag in der Postingliste verwende, das mache ich, das verwalte ich selber.
Weil wenn die Abstände klein sind, dann kann ich viel weniger Bits nehmen, als wenn die Abstände groß sind.
Da muss ich halt mehr Bits nehmen und deswegen heißt das Ding auch Variable Byte-Encoding, weil ein Eintrag in der Postingliste halt unterschiedlich viele Bytes haben kann, je nachdem, wie groß der ist.
Oder wie der Abstand ist zwischen der vorherigen und der nächsten ID.
Und wenn ich jetzt sortierte Listen habe, dann kann ich die sehr, sehr gut, da gibt es halt diverse Algorithmen für, kann ich sehr gut schneiden zum Beispiel.
Solche Operationen wie Schnittmenge davon bilden, das geht halt toll.
Geht mit dem Sets auch, aber Sets können ja noch viel mehr und so.
Aber da brauche ich ja eigentlich nur diese Schnittoperation, vor allem ist es auch total simpel und das geht halt super, wenn ich so sortierte Listen habe.
Ja, und genau, das ist halt auch, das ist relativ schnell, das vor allen Dingen auch deswegen schnell, also die Kompression an der Stelle, die ich dadurch kriege, also ich kriege das auf ein Drittel des Ursprungs, also wenn ich das einfach nur als Integer speichern würde, dann brauche ich, ja, sagen wir mal, ich brauche einen Speicher 1, ja, und wenn ich das irgendwie variable, mit Variable Byte-Encoding codiere, dann brauche ich halt nur noch Speicher 0,3.
Also das reduziert das halt auf ein Drittel.
Und es ist auch noch viel schneller.
Und der Grund, warum es viel schneller ist, ist halt einfach, dass der das Bottleneck ist halt irgendwie, das durch die CPU zu drücken, also die Speicherbandbreite ist das Problem.
Du musst es halt irgendwie, diese Listen von Arrays musst du halt irgendwie durch die CPU kriegen und irgendwie durch den Hauptspeicher.
Und wenn die kleiner sind, dann geht das schneller durch den Hauptspeicher, weil, oder durch den Bus, weil ja, und das in der CPU dann auszupacken und miteinander, das ist halt alles kein Problem mehr.
Aber ja, das halt aus dem Hauptspeicher durch die CPU zu quetschen, das ist halt das Problem.
Und wenn das kleiner ist, dann geht das halt schneller, weil du hast halt nur so und so viel hundert oder so und so viel Gigabyte pro Sekunde, die du da durchkriegst.
Und ja, genau, deswegen macht man das so, das macht das Ganze so ein bisschen kompliziert.
Aber ja.
Und auch selbst so von dem Volltext-Index von Postgres weiß ich, dass er das auch so macht im Prinzip.
Also die solche Sachen werden da auch schon gemacht.
Also kann man sich schon vorstellen, es ist schon relativ, ist halt nicht so eine total naive Implementation.
Das ist auch ganz schön optimiert schon.
Ja.
Jetzt haben wir eine schnelle Suchanfrage schon, aber ich habe immer noch nicht genau verstanden, warum die Ergebnisse jetzt besonders toll sein sollen.
Es gibt bestimmt noch ganz viele andere.
TFR, DFS oder der Standard.
Das hat man ganz lange gemacht, jetzt heutzutage auch nicht mehr, sondern heutzutage nimmt man eher sowas wie, äh, also es gibt halt zum Beispiel die Treck-Konferenzen.
Treck, das hört sich nach einer Raumschiff-Serie an.
Ja, wird eher mit C geschrieben und nicht mit K, aber da haben sich Leute halt Gedanken drüber gemacht, wie evaluiert man eigentlich Suchergebnisperformance von Suchmaschinen.
Da gibt es dann diverse Standard-Korpora mit Dokumenten drin, wo man dann halt auch Standardqueries hat, die man drauf abfeuert und dann guckt halt, wie sind die Ergebnisse und so.
Und da hat sich irgendwann, ich weiß gar nicht, wann das, also TF-IDF hat man lange benutzt, aber dann hat man festgestellt, so kleine Modifikationen, sie formeln, es sieht immer so ein bisschen ähnlich aus, aber manchmal passt man die so ein bisschen an, manchmal kommen so konstante Faktoren dazu oder so, die man irgendwo reinbaut.
Und dann wird das, werden die Ergebnisse ein bisschen besser.
Und das, was momentan, also das hat ganz viele unterschiedliche gegeneinander getestet.
Das, was in den meisten Fällen gut funktioniert und das, was jetzt auch alle so als Standard, glaube ich, verwenden, nennt sich BM25.
BM25.
Ja, oder OKPM steht für Best Match.
Ja.
OK.
Ja.
Das ist, glaube ich, hier.
Ja, ja, ja, genau, genau.
Daher kommt das auch.
Entschuldigung.
Und das ist nicht großartig anders als TF-IDF sozusagen standardmäßig.
So ein paar Dinge sind halt auch dran, aber eigentlich sind da nur so ein paar magische Konstanten und Faktoren drin.
Und ja, das ist halt so ein bisschen Formelai.
Und ist ja auch nicht offensichtlich, warum das jetzt genau diese Art besser funktioniert als die anderen.
Deswegen heißt es, und genau deswegen ist es auf BM25.
Also man hat halt ganz viele Dinge ausprobiert und das, was dann halt über ganz viele Datasets hinweg und Curry-Sets gut am besten funktioniert hat, ist halt dieses Ding.
Nämlich nicht Bestmatch 13 oder 47, sondern Bestmatch 25 hat sich herausgestellt, als das funktioniert in den meisten Fällen irgendwie.
Das ist doch eine tolle Zahl übrigens, ja.
Also man konnte das vorher gar nicht sagen, was das jetzt, welches von denen dann wirklich gut funktionieren würde und dieses Ding ist halt das.
Und seitdem das auf dieser Konferenz halt dann als Ergebnis rausgefallen ist.
Guckst du eigentlich Picard?
Die Serie.
Ja, ist gerade eine neue Star Trek-Serie.
Ja, tatsächlich habe ich jetzt auch mit angefangen, weil ich dachte so gut.
Ich habe auch schon zwei Folgen geschafft.
Ja, es gibt jetzt fünf, glaube ich, ne?
Kann sein.
Ich habe keine Ahnung.
Ja, jetzt war jetzt ein verregneter Sonntag dieses, da haben wir, glaube ich, tatsächlich alle geschafft.
Cool.
Ja, läuft gerade auf Prime.
Sehr schön.
Ja, Entschuldigung, ich wollte dich nicht von der Track-Konferenz abhalten.
Ja, ja.
Also ansonsten bin ich ehrlich gesagt gar nicht so ein Star Trek-Fan.
Aber ja, da ist ja auch nicht mehr.
Der Spektakelfaktor doch irgendwie mitgezogen.
Der Flongen Flossbach.
Ja.
Jedenfalls, ähm, genau, genau.
Also das ist halt dabei rausgefallen, deswegen implementieren das alle.
Das ist auch immer, wie, das ist auch schon über zehn Jahre her oder so.
Da dachte ich mir so, ah, da habe ich davon gelesen, Bestnet 25, voll gut.
Bringt auf jeden Fall noch ein bisschen was gegenüber TF und so.
Dazu kann man das nicht in Lysin einbauen.
Und dann habe ich da so ein bisschen reingeguckt und dachte mir so, oh nein.
Das geht nicht.
Ich muss so viele Klassen anfassen, das kann man einfach völlig vergessen.
Und war relativ enttäuscht und hab mir damals schon gedacht, Lysin, Dreck.
So ein Unsinn.
Aber mittlerweile haben das andere Leute dieses, äh, haben das implementiert.
Die hatten mehr Lust da drauf.
Mehr Ausdauer und jetzt ist es halt drin und es funktioniert und das ist auch das, was man, glaube ich, automatisch irgendwie kriegt als Default.
Wie M25.
Was war denn damals bei den ersten Suchmaschinen?
Also Alter Vista zum Beispiel war ja so mit TF-IDF.
Oder leichte Abwandlung davon, aber im Wesentlichen das.
Das ist auch das, was irgendwie so ein bisschen diese ersten SEO-Geschichten getrieben hat, wo Leute dann so angefangen haben, alle möglichen Worte mit in ihre Seiten zu packen, für die sie gefunden werden wollen.
Ja.
Weil das zielt natürlich genau darauf ab, halt irgendwie den TF-IDF, den TF-IDF-Wert hoch zu.
Und das funktioniert ja auch.
Also wenn du es ganz naiv machst, kannst du damit tatsächlich irgendwie dann für alles Mögliche gut ranken.
Ja, es lässt sich halt sehr leicht gamen, aber ja, funktioniert heute natürlich alles nicht mehr so richtig toll.
Wird ja bestraft.
Ja, ja, ja, ja, ja.
Ja, das ist auch noch so ein Thema, Seone.
Aber genau, also diese, aber daran sieht man schon, dass es mit der Relevanz irgendwie nicht so einfach ist, dass die ganzen Suchmaschinen haben das auch nicht so richtig hingekriegt und die erste, die das halt so ein bisschen, die was fundamental Besseres gemacht hat an einer Stelle, die hat halt alle anderen dann, wie sagt man das, aus dem Wasser geblasen hinter sich gelassen und ist jetzt halt irgendwie die größte.
Ich muss mir gerade ein großes Liebferd vorstellen, dass er einmal in die Badewanne hüpft.
Ja, weil eben so ein einzelner Wert ist halt so, ist halt problematisch.
Leute fangen an, dann drauf zu optimieren und dann ist auch die Frage, was für Leute oder was für Fragen stellen die Leute eigentlich und kann man das eigentlich damit abbilden?
Ist das, ist der Wert, so ein TF-EDF, so Cosinus-Sistanzwert, ist der für alle Arten von Suchanfragen und Dokumenten immer das Richtige?
Und da ist auch die Antwort relativ klar, nein.
Ist nicht so.
Also, und das ist halt etwas, was Leute, glaube ich, oft nicht so wirklich auf dem Schirm haben, dass ihr Problem oft nicht ist, irgendwie eine etwas bessere TF-IDF-Formel zu finden oder irgendwie was Magisches, was irgendwie anders die Relevanz gut macht, dann plötzlich magisch, sondern dass eigentlich die Zeit besser investiert wäre, sich zu überlegen, okay, was habe ich eigentlich für Dokumente, was habe ich eigentlich für Suchanfragen darauf und was kann ich tun, um das irgendwie zu verbess
ern?
Und da gibt es auch viele Dinge, die man machen kann, aber das sind halt, je nachdem, was man für ein Problem hat, sehr unterschiedliche Sachen.
Zum Beispiel, aber ich meine, es ist eigentlich, vielleicht kann ich einfach ein paar Beispiele dafür nennen, warum das halt, also TF-IDF, wenn ich jetzt zum Beispiel Location-Informationen dabei habe, hilft mir halt nicht so richtig viel.
Also ich suche nach einem Restaurant-Namen irgendwie bei Google Maps oder so.
Dann hilft es mir nichts, wenn ich jetzt TF-IDF die nächsten Namen irgendwie kriege von allen Restaurants in Deutschland oder weltweit sortiert.
Dann wird wahrscheinlich irgendwo ein Restaurant in Kuala Lumpur vielleicht irgendwie am ähnlichsten sein oder den besten Score haben, aber das hilft mir ja nichts, weil ich komme da ja gar nicht hin.
Das heißt, da muss irgendwie die Information, wo ich bin und wie nah das an mir dran ist, ja auch irgendwie mit rein.
Sonst geht das bestimmt nicht so toll.
Oder halt, wenn ich jetzt mal eben eine E-Commerce-Seite habe oder eine Hotelbuchungsgeschichte oder was auch immer, etwas, wo halt hinterher Leute dann was kaufen oder was buchen oder so, dann kriege ich ja eine ganze Menge implizite Informationen darüber, was die Leute relevant gefunden haben zu einer Query.
Also wenn jetzt irgendwann nach irgendwie, keine Ahnung, samtbezogene Sessel Amsterdam gesucht hat oder sowas und dann hinterher irgendein Hotelzuschlag.
Ganz um Rechtsbestände, ja.
Dann weiß ich, dann weiß ich halt, das ist wahrscheinlich relevant gewesen für diese Suchanfrage.
Und diese Information kann ich natürlich auch wieder irgendwie mitverwenden, um das beim nächsten Mal, wenn jemand anders so eine Anfrage stellt, das zu verbessern.
Aber auch da hilft mir halt die FEDF gar nicht.
Cookies.
Cookie hilft mir auch nicht.
Stehen die in den Informationen, kann man die da nicht in sowas reinschreiben und die dann irgendwie beim nächsten Mal wiederwählen?
Oder geht es tatsächlich darum, dass die Informationen über diesen einen Menschen für alle anderen Menschen zu depulieren?
Ja, also genau, es geht nicht um die einzelne Geschichte, aber ich erfahre sozusagen über das Verhalten von Leuten etwas darüber, welche Sachen für welche Dokumente, also welches Hotelzimmer, wenn ich jetzt nach, wenn ich in so einer Hotelbuchungsengine habe oder welches Produkt irgendwie, wenn ich eine E-Commerce-Seite habe, relevant war für eine bestimmte Suchanfrage, weil wenn jemand das sucht und dann kauft, dann war es wahrscheinlich relevant.
Es sei denn, es wird natürlich auch Ausnahmen, es kann natürlich auch sein, dass, keine Ahnung, ich nach, weiß ich nicht, Dora-Automat suche, ja, und dann aber so geflasht bin von dem, was hast du hier?
Ein Luftbefeuchter, den ich irgendwie sehe im Ergebnis, obwohl er völlig irrelevant ist und dann draufklicke und den sofort kaufe.
Direkt neben den goldenen Schieberrad, vielleicht waren die auch zusammen mit einem.
Aber so im Durchschnitt ist es wahrscheinlich so, wenn ich, wenn Leute was suchen und dann auf irgendwas aufklicken und das kaufen, dann war das wahrscheinlich relevant.
Und die Informationen sozusagen, wie viele der Leute, oder das, wenn ich jetzt eine neue Suche, jetzt stellt jemand nochmal die gleiche Query.
Und jetzt kann ich ja an das Suchergebnis mit ranpappen.
Okay, Leute, die diese Suchanfrage auch gestellt haben, oder so und so viele haben das gekauft.
So und so viele haben drauf geklickt.
Leute, die das gekauft haben, kaufen auch.
Ja, ist nicht so ganz das gleiche, aber das kann ich auch zum Ranken benutzen.
Muss ich ja nicht, ja, kann ich auch.
Nur mit TF-EDF hat das nichts zu tun.
Ich muss mir halt überlegen, wie ich das so kombiniert kriege, dass es da halt irgendwie auch zum Ranken mit verwendet wird.
Und tatsächlich ist es halt meistens so, dass man irgendwie andere Dinge, eben Location, irgendwie kaufen Leute das überhaupt?
Ist das irgendwie interessant?
Gehört das irgendwie zu den Dingen, die momentan irgendwie auf meiner Seite sowieso angefragt werden oder ist das halt irgendwas Uraltes oder so?
Diese ganze Information muss ich irgendwie zusammenpacken und das muss irgendwie in die Relevanz mit reinfließen.
Und ja, das macht das Ganze natürlich so ein bisschen komplizierter, aber wenn man das macht, dann kann man halt auch durchaus deutlich bessere Ergebnisse erzielen, vor allen Dingen auch zum Beispiel gegenüber Google oder so, weil Google kann halt all das im Grunde nicht machen, weil die wissen halt nicht genau, was die Leute da eigentlich suchen.
Es ist halt ein viel breiteres Ding.
Also es ist halt sozusagen, im gesamten Web kann ich irgendwas finden.
Also Google macht ein höchst ein viel schwereres Problem.
Das heißt, ich kann, wenn ich das richtig mache, in einem engeren Rahmen halt viel bessere Ergebnisse unter Umständen erzielen, als als Google das jemals könnte.
Und das kann natürlich sehr interessant sein unter Umständen.
Aber ich muss dann halt solche Sachen mir schon angucken.
Es reicht nicht, wenn ich da eine Elasticsearch nehme, das in der Default-Konfiguration laufen lasse und dann hoffe, dass das irgendwie gut wird.
So einfach ist es leider nicht.
Oder was auch total interessant ist, was Leute oft nicht machen, aber was halt so eine total einfache Geschichte ist, sich anzugucken, was für Queries geben die Leute eigentlich ein und was sind die Querys, wo kein Ergebnis kommen.
Also ich meine, ich finde das ja sowieso mehr total unverständlich, wenn ich jetzt irgendwie auf oft habe ich den Fall, tatsächlich, ich suche keine Zeit zu kochen, keine Lust oder so, okay, dann lass uns doch mal irgendwo was zu essen bestellen und abholen oder so.
Okay, das war ganz gut, gehen wir auf die Webseite, um zu gucken, hat der Laden denn jetzt auf oder nicht.
Das ist halt immer wieder, ganz viele Läden kriegen das irgendwie nicht hin, da die Öffnungszeiten drauf zu schreiben.
Und haben aber vielleicht ein Suchfeld und wenn die Leute da immer Öffnungszeiten reinschreiben und die nicht finden, oder die Öffnungszeiten sind irgendwo versteckt, wo tiefe Struktur, dann kann man ja auf die Idee kommen, man sucht danach.
Und wenn ich jetzt so eine Seite habe und die Leute immer Öffnungszeiten reinschreiben und nie irgendwas finden, dann weiß ich, okay, hier kann ich vielleicht was verbessern.
Und das ist etwas, womit relativ leicht man irgendwie wahrscheinlich viele Benutzer besser zufriedenstellen kann.
Und das wird irgendwie überraschend selten werden solche Sachen gemacht.
Und man kann natürlich auch noch dann schummeln und dann sagen, okay, wenn.
Wenn Öffnungsheiten angegeben wird, zeigt immer als erstes die Öffnungsheiten an und nicht die Ergebnisse, die die Suche drücke.
Genau.
Also das ist halt so ein bisschen wie, wenn man sich vorstellt, man hat eine Firma und die hat irgendwie so eine Support, ein Helpdisk oder irgendwie eine Support-Hotline oder so, dann hat man ja bestimmt auch irgendwie, keine Ahnung, wenn man einen neuen Mitarbeiter da einarbeitet, dann setzt man den da hin und sagt dem hier so, hier ist eine Liste mit den 50 häufigsten Fragen oder Problemen, mit denen die Leute zu dir kommen werden und da sind die Antworten da drauf.
Das kann man ja einfach verwenden, sozusagen.
Man wird ja nie auf die Idee kommen, ja, die Leute rufen jetzt an und dann sieh halt mal zu, irgendwie, dann nimmst du TF-IDF oder dann gehst du an den Aktenschrank hinter dir und guckst, was dabei rauskommt.
Das wird halt nicht gut funktionieren.
Insofern, also die, oft ist es, man hat so immer so Powerlaw-Verteilungen, also wieder.
Eine was?
Eine Powerlaw?
Ja, Powerlaw, also Potenzmengenverteilung, ich weiß gar nicht, wie das deutsche Wort dafür ist.
Dass du, das hat manchmal ganz vielen Sachen, dass halt 20% der sozusagen Such, also 20% der, also bei Suchmaschinen wäre das wahrscheinlich, ich hoffe mal, ihr seht keinen allzu offensichtlich ein Unsinn, aber dass halt 20% der Queries machen halt 80% der Suchanfragen aus oder sowas.
Kommt natürlich auch drauf an.
Es gibt wahrscheinlich auch Suchmaschinen, die sehen ganz viele Querys nur einmal und dann nie wieder und davon, also vielleicht, manchmal ist halt der Tail halt länger und manchmal ist es halt der Tail auch dicker.
Aber oft ist es so, dass eine kleine Anzahl von Querys macht halt schon einen großen Teil der Anfragen, die überhaupt gestellt werden, aus.
Und wenn das halt 100 Stück sind, dann kann man die sich halt alle mal angucken und sich überlegen, okay, was könnte man denn Usern, die dauernd diese Anfragen stellen, dann vielleicht mal zeigen, was sie interessieren könnte.
Und das hat dann gar nichts mehr mit, was ist dies, was macht eigentlich die Volltext, was macht eigentlich diese Software, die Volltextsuche macht, sondern wie gehe ich mit diesem Problem irgendwie um auf der Seite.
Und natürlich muss ich dann halt irgendwie eine Art haben, wie ich sicherstelle, dass wenn ich jetzt irgendwelche Änderungen mache, dass nicht kaputt geht beim nächsten Release und ich muss es testen und all diese ätzenden Softwareentwicklungs-Best Practices und so, die man halt einhalten sollte, wenn man irgendwie Dinge programmiert.
Aber wenn man das macht, kriegt man damit auch Ergebnisse, die ganz gut sind.
Also du willst was dann vielleicht in Dango bauen oder so und dann.
Und dann einfach an die Suche dann bestimmte Dinge, Bedingungen knüpfen, wenn das und das steht, dann machst du irgendeine Liste von Fragen, denen deine Antwort zugeordnet ist und wenn das kommt, dann wird die direkt ausgespucken und ansonsten wird dann die Suchmaschine bedient oder sowas.
Ja, und dann halt nur dann, wenn das nicht.
Also und dann geht es halt sozusagen in eine Suchanfrage und dann wird halt gerankt nach all den anderen Dingen, die man halt auch so nach.
Und dann hat so vielleicht sogar ein Modell, das irgendwas rankt, aber gut, habe ich jetzt auch noch ein.
Aber halt irgendwas, was halt, wo man sich relativ sicher sein kann, dass das sinnvoll ist.
Und erst wenn das alles nicht klappt, dann fällt es zurück auf sowas wie TF-EDF.
Aber mit TF-IDF anzufangen, das ist eigentlich ein ja.
Ja, okay, keine gute Idee.
Also du hast gesagt, okay, TF-EDF, das ist das Standard, was zum Beispiel ein ElasticTurch oder ein Solar als Standard machen, weil der das Benzin drunter ist, was das irgendwie auch kann, obwohl das dieses BM25 ist.
M25 ist eigentlich sozusagen das, was dann wahrscheinlich verwendet wird, meistens.
Aber die Unterschiede sind nicht so groß.
Also natürlich macht es in gewisser Weise einen großen Unterschied.
Wenn man jetzt viele Sucheinfragen hat und seite wo viel Umsatz ist und dann die Ergebnisse in Prozent besser werden, dann ist das ja schon mal super.
Nur dass dadurch, dass man das alte ausgetauscht hat, ist es ja unter Umständen viel Geld, was dann zusätzlich reinkommt und so.
Aber das sind halt so, also die Änderungen an diesen Details, das bringt nicht so wahnsinnig viel.
Ein bisschen was.
Änderungen an, man bezieht jetzt zum Beispiel implizites User-Feedback mit ein, wie zum Beispiel Klicks oder halt irgendwie, welche Price-Range jemand angegeben hat oder solche Dinge, das bringt halt viel, viel mehr.
Ja, ja, da kann man ganz, ganz viele tolle Informationen eigentlich sammeln und verwenden.
Da kann man eine richtige Wissenschaft draus machen.
Ich glaube, da sind auch ziemlich viele Marketeers, die sich mit sowas auseinandersetzen, irgendwie, die dann irgendwie Interesse daran haben, wie man das in Besser bastelt.
Interessant, ja.
Ja, ja, das ist ja auch dann so ein Thema, wenn man jetzt selber sozusagen nicht in der Rolle von einer Suchmaschine ist, die Leuten irgendwie Sachen finden möchte, sondern umgekehrt in der Rolle des Dokuments, das gefunden werden möchte, sozusagen, als wenn man eine Webseite hat, die halt über Google zum Beispiel gefunden werden will oder so.
Und dann hat man dieses SEO-Problem.
Da gibt es ja auch ganz unterschiedliche, ganz unterschiedliche Aspekte und auch da ist es halt so, dass üblicherweise wird dann halt zu sehr auf die technischen Aspekte fokussiert.
Und dann wird halt irgendein Quatsch gemacht, ja, weil der gerade halt irgendwie Mode ist oder Hip oder wo das Gerücht geht, das kann man jetzt machen und das ist voll toll.
Und dann wird man sofort bei Google super gereinigt, ja.
Das funktioniert zwei Monate, dann kommt der nächste Patch und dann erstmal down.
Dann werden alle gelöscht, alle Ergebnisse, die man vorhat, das ist super.
Also ich habe gehört, Content ist King, ja, also Google versucht, also zumindest das Team versucht, immer auf den besten Content zu optimieren, schmeißen alle Sachen raus, die so Leute ausdenken.
Das heißt, langfristige Strategie wäre tatsächlich qualitativen Content aufzustellen, der dann auch gut suchbar ist, der mit solchen TF-ID-F-Sachen vielleicht dann auch irgendwie klarkommt, aber der dann durch die, also vielleicht haben sie einen Qualitäts-Strenker, der sich irgendwie durch irgendwelche Daten ergibt und den sie dann damit bauen.
Ja, was sie halt machen.
Also Internetsuche ist ja sowieso nochmal vielleicht was anderes als Volltext-Suche, weil man ja da noch andere Dinge mit einbezieht.
Also die Linksstruktur, wie was, weil früher war es halt vielleicht immer so, dass dann man ganz viele Backlinks haben wollte oder sowas, dass man ganz viel gelenkt wurde, weil man auf irgendwelchen Seiten stand und wenn man dann irgendwie dieser zentralste Knoten in diesem Netz war, war man irgendwie der relevanteste oder so.
Und das ist jetzt vielleicht auch noch ein bisschen anders.
Ja, aber das zeigt ja genau, dass halt die reine TF-IDF-Geschichte ist halt nicht unbedingt das führt halt nicht zu so total super Ergebnissen, sondern Google sind halt die Ersten, die mehr Informationen mit reingenommen haben und ich würde sagen, natürlich, das ist absolut ganz stinknormal, Volltextsuche eigentlich alles.
Aber Google waren halt die Ersten, die jetzt nicht nur TF-IDF oder irgendwas, eine Variation davon verwendet haben.
Google hat den Page-Rank eingeführt.
Sondern sie haben einen Page-Rank, genau.
Was ist denn der PageRank?
Das hat gar nichts mit Seiten zu tun.
Ja, genau, genau.
Das halt könnte man denken, dass es was mit dem.
Und so wurde es wahrscheinlich auch oft interpretiert.
Mit den Pages?
Dem Rank der Page zu tun hat, die man halt so hat.
Dann gab es auch so irgendwie Browser-Plugins, die einem den eigenen Page-Rank auf der Seite angezeigt haben und so.
Aber nein, das Wort kommt tatsächlich von Larry Page, also dem der beiden Gründer von Google, der das halt in seiner Doktorarbeit irgendwie einen neuen Algorithmus irgendwie vorgestellt hat für das Ding auszurechnen in großen Matrizen halt Eigenwerte auszurechnen.
Also ich glaube, das ist irgendwie Power Iteration oder so.
Ja, wir hatten du gerade noch zwei Sachen gesagt.
Einmal diese Power-Dings, das habe ich ja schon wieder vergessen, wie es hieß.
Und gerade Eigenwerte berechnen aus Matrizen mit Papering.
Vielleicht erzählen wir das nochmal als einzelne kleine Subkapitel.
Ja, ich weiß gar nicht, ob es so relevant ist, ich glaube, man kann es auch, wenn man das en Detail irgendwie, dann wird das relativ trocken und langweilig.
Also ich meine, im Grunde ist, was es tut, ist relativ einfach erklärt.
Es hat was zu tun mit, also wenn man kann den Linkgrafen des Web, also das Web ist im Grunde ein Graph.
Also verknüpfte Knotenpunkte, die durch Linien miteinander verknüpft sind, das sind die Linien sind, die Links,
die einfach nicht.
Mathematische Definition, eine Menge aus Knoten und Kanten und keine Ahnung, es gibt Gerichtete, wo die, das Web ist ein gerichteter Graph.
Also ich kann halt auf eine Seite linken und die linkt nicht auf mich zurück.
Und ja, es gibt jetzt, was das Ding hat bestimmte Eigenschaften, die es halt besonders machen.
Also zum Beispiel Linkkraft des Web ist halt super Spaß.
Das sind halt die meisten Seiten haben nur Verbindungen zu ganz wenigen anderen, ja, aber also es gibt ja auch Graphen, wo alle miteinander irgendwie verbunden sind.
Das ist beim Web nicht so, die zu den allermeisten Seiten habe ich eben keine Links.
Und ich kann den als Matrix darstellen, indem ich sage, okay, alle Webseiten oder Knoten sind halt irgendwie die Zeilen und Spalten der großen Matrix.
Und ja, wenn ich einen Link habe, dann trage ich da jetzt zum Beispiel eine Eins ein in der entsprechenden Zeile und Spalte.
Also wenn ich halt von X nach Y ma.
Ich bin eine 1, wenn ich von meiner Seite auf deine Seite linke, dann steht ja 1.
Genau.
Ja, und das kann ich für das ganze Web machen und das in eine Matrix packen.
Was natürlich ein bisschen schwierig ist.
Auch da kann ich halt nutzen, dass das Ding Spaß ist und dass die allermeisten Werte null sind.
Und die, die null sind, die schreibe ich halt einfach irgendwo hin.
Und da kann ich die ganz sparen, die irgendwo, muss ich die nicht speichern.
Das heißt, ich muss ja tatsächlich sozusagen nur da, wo Links sind, irgendwas speichern.
Und ja, dann kann ich zum Beispiel im Page-Rank ausrechnen, ist einfach nur sozusagen ein Maß für die Wahrscheinlichkeit, wenn ich einen Random Walk über diesen Graphen mache, auf diesem auf dem Ding vorbeizukommen.
Also wenn
ich zufällig irgendwo durchs Internet surfe mit irgendeiner zufälligen URL, mit der ich angefangen habe, komme ich dann dahin, wo ich hin will.
Oder gibt es einen Startpunkt?
Ja, lauf ich darüber.
Ja, genau.
Laufe ich mit dieser Satz, ja genau.
Also gibt es einen Startpunkt?
Nö, du fängst halt irgendwo an.
Du klickst dich einfach irgendwo durch.
Ja, random, ja.
Ja, okay.
Wikipedia-Artikel 1, 2, 3, 4, 5, 5, Querverweis auf irgendeine Quelle, die halt auf irgendeinen Nachrichtenportal, das sind auf irgendeinem Ender.
Und was das Ding im Grunde abbildet, ist wie wichtig, wie zentral ist eigentlich eine Seite?
Und wie tief in diesem Knoten, wenn man sich das Web jetzt doch wieder als Knoten vorstellt oder sowas.
Und dann der zentralste Knoten, welche Seite ist das?
Ist das wahrscheinlich mittlerweile Google?
Ich weiß es nicht.
Gibt es da, weißt du das?
Gibt's das?
Naja, keine Ahnung.
Müsste dann ja eigentlich Google selber sein.
Ja, Wikipedia ist immer weiter oben, aber Google, nee, glaube ich gar nicht mal.
Google, äh, die, äh, die Links, die.
Die sind nicht hart, die sind nicht Google, sondern der generiert.
Die gehen da nicht mit in den Graphen rein.
Ja, okay.
Also, ich weiß es nicht.
Aber ist auch eigentlich egal.
Spannend.
Ja.
Aber wenn man das jetzt kombiniert mit eben TF-IDF aufgeschickt, dann ist das halt viel besser, als wenn ich das nur, wenn ich nur TF-IDF nehme, weil es ist halt in gewisser Weise ein Maß dafür, ja, sozusagen, wie wichtig ist diese Seite eigentlich insgesamt.
Und dann kombiniere ich halt eine lokale Geschichte TF-IDF mit irgendwie einer so einer eher globalen Geschichte.
Und das funktioniert dann schon ganz gut.
Und das führt halt dazu, dass ich eben, dass solche simplen Ich schreibe jetzt fünfmal irgendein Keyword auf eine Seite, Spielereien halt dann nicht mehr funktionieren.
Weil dadurch werde ich halt nicht zentraler in dem Kraft, dass ich das tue.
Und aber auf der anderen Seite ist das halt das, was dann die Leute mit den Backlinks immer meinen.
Also wenn du halt ganz viele Links hast, die auf dich zeigen, dann bist du natürlich zentraler.
Aber jetzt kannst du die Links natürlich auch wieder Gewächten und das ist so ein Katze-und-Maus-Spiel und keine Ahnung.
Aber Google verwendet jetzt auch nicht nur Patrank und irgendwie sowas CF-IDF-Artiges oder so, sondern die verwenden halt ganz ganz.
Der Patrank gibt es jetzt irgendwie neun oder zehn, also das werden das irgendwie nummertiv gestellt und Patrank 10 ist tatsächlich Google.com und The Government of India, India GovN.
Aha.
CNN.
Und ja, wie drei Konservation.
Und dann Patrank 9 ist auch Python dabei, also Python Org.
Also wenn du einen Link von Python org kriegst, dann voll gut.
Ja, genau.
Das zählt was.
Naja, also tatsächlich, heutzutage ist es so, es wird ganz, ganz viel, also nicht nur diese beiden Werte, sondern nehmen wir an, würde es jetzt nur TF-EDF und den Patchrank haben, hältst du zwei, die sind im Suchmaschinenbereich nennt man das mal Signale.
Im Machine Learning-Bereich würde man das Features nennen.
Sondern Google sammelt eher so 100, sagen sie so, aber tatsächlich sind es wahrscheinlich noch ein paar mehr.
Und das Ranking ergibt sich daraus, dass jetzt diese Signale, von denen ein paar aus der Query kommen und möglicherweise auch aus dem User, der die Quer gestellt hat.
Ein paar kommen aus dem Dokument, irgendwie sowas wie PageRank oder kommt die Query irgendwie in der Domain vor oder sowas.
Ein paar kommen aus einer Kombination von Query und Dokument.
TF, IDF wäre so ein Fall, ne?
Da multipliziert man das ja miteinander.
Und jetzt hat man halt sozusagen für jedes Suchergebnis so einen Vektor mit irgendwie vielleicht 100 Einträgen oder 200 oder 500, auch immer.
Und dann hat man halt üblicherweise ein Modell.
Ist auch völlig egal, ob das jetzt ein Machine Learning trainiertes Modell ist oder ob das ein Modell ist, das Leute von Hand getuned haben.
Es kommt aufs Gleiche raus letztlich, das diese Vektoren halt in Reihenfolge bringt und irgendwie halt einen endgültigen Score halt ausgerechnet.
Im simpelsten Fall könnte das einfach eine gewichtete Summe sein, zum Beispiel.
Du sagst halt, wie wichtig ist mir jedes einzelne Feature, dann machst du halt die Summe drüber und normierst es vielleicht noch irgendwie oder so.
Und dann sortierst du halt nach der Summe.
Könnte man machen.
Oder man kann es halt dieses Modell halt auch irgendwie trainieren.
Und ja, kriegst dann halt irgendwie am Schluss eine Sortierreihenfolge.
Und das ist halt eher so das, was heute gemacht wird.
Das ist lustigerweise aber in den ganzen, also zumindest, ich weiß nicht, ob es kommerzielle Suchmaschinen gibt, die das implementieren, die sowas ähnliches machen.
Die ganzen Open Source-Suchmaschinen können das nicht.
Nicht so, also so ein bisschen.
Also man kann so ein bisschen was machen.
Aber so richtig.
Aber so richtig toll können die das, also so cool wie irgendwie die großen Web-Suchmaschine machen die das eigentlich nicht.
Das ist auch so etwas.
Also mich, mich, mich ärgert ja so ein bisschen oder ich mich wundert, dass es da so wenig ist.
Also es sind viele Dinge, die halt so im Bereich Websuche oder so halt irgendwie schon lange gemacht werden.
Oder da, das kommt halt nie so richtig an.
Also was mich zum Beispiel wundert, ist, was Google seit 2004, glaube ich, macht oder so, die halten ihre Indizes alle nur noch im Hauptspeicher.
Die gehen gar nicht mehr auf die Platte, weil Platte ist immer so ein bisschen blöd, weil du kriegst halt Latenzen, werden halt unvorhersehbar.
Plötzlich liegen halt deine Sektoren ungünstig, irgendwie, du musst warten, bis das da vorbeikommt und du musst aber viele Sachen miteinander mergen und jetzt liegen die Kombinationen von die Sektoren sind halt ungünstig korreliert und plötzlich musst du halt auf eine Quary sehr lange warten.
Das ist eigentlich totaler Mist.
Du willst eigentlich relativ sicher sein können, dass es halt nach so und so vielen Millisekunden oder so halt durch ist und das kannst du eigentlich nur dann garantieren, wenn das ganze Zeug immer im Hauptspeicher liegt und wenn du noch ein paar andere Sachen irgendwie berücksichtigt hast.
Und Google, ich glaube auch, das ist der Grund, warum Google das so macht, die möchten halt wissen, okay, wenn jemand eine Suchmalanfrage eingegeben hat und wir dann das an diese 1000 Server, die halt jeweils nur einen Teil vom Index haben, schicken und dann kommt ein Ergebnis zurück, dann müssen wir halt nach 20 Millisekunden ist das halt durch.
Wenn da halt Platten im Spiel wären, könnte man das überhaupt nicht mehr garantieren, weil du hast halt Pech und irgendwo musst du halt auf eine Platte warten.
Und die Seektime da ist halt bei Platten auch, es sind halt mal 10 Millisekunden oder noch mehr.
Und dann wird das Gesamtergebnis halt langsam dadurch, das ist halt irgendwie Kacke.
Aber jetzt, wenn man sowas wie Lucine hat oder Elasticsearch oder Solar, da kann dann das durchaus passieren.
Also wenn man Pech hat, dann ist eine Query halt langsam.
Und zwar auch nicht deterministisch, irgendwie bestimmte Query, sondern halt irgendeine.
Was halt, naja.
Aber das ist halt so designt.
Also es kann auch sein, dass man mittlerweile sagen kann, okay, nur dieser Index soll in Memory liegen oder so, aber ich weiß es nicht so genau.
Auf jeden Fall mich wundert, dass das halt, weil bei den Hauptspeichergrößen heutzutage sollte das überhaupt kein Problem sein, dass man halt den Index halt im Hauptspeicher hält, ne?
Und wenn das nicht reicht, dann schleibt man halt mehr Maschinen dazu.
Ist auch, warum.
Noch ein paar Ramriegel in den Server.
Warum muss das auf, wie liegt man das auf die Platte optimiert sein?
Das macht doch heutzutage eigentlich keinen großen Sinn mehr.
Oh, da habe ich noch was vergessen.
Bei den Ding, Redis, das hatten wir jetzt auch schon ein paar Mal, das kann auch Volltext suche mittlerweile ganz gut.
Also Redis ist ein Cache, ein für bestimmte Dinge, die als Key-Value.
Ja, Key-Value ist aber nicht nur das, das kann auch ein paar andere Datenstrukturen und das liegt tatsächlich nur im Hauptspeicher und das kann auch Volltext-Suche und das wollte ich mir auch schon immer mal angucken, aber habe ich es in letzter Zeit nicht geschafft.
Es kann sein, dass das mittlerweile vielleicht ein bisschen sogar das erfüllt, was ich irgendwie gerne hätte.
Ja.
Aber Luciden ist halt tatsächlich eher so drauf optimiert, dass es auf der Platte gut aussieht.
Und ja.
Also da hängt das irgendwie so ein bisschen hinterher.
Und es hängt halt auch hinterher bei solchen Sachen wie, also im Maschinenlear-Bereich läuft dieses ganze Thema immer unter dem Namen Learning to Rank.
Also sozusagen, dass du halt, du hast halt Features und du hast halt jetzt die Tränen in deinen Trainingsdaten sehen immer so aus, dass du Mengen hast von Queries und dann Ergebnislisten, wo halt Leute, also redaktionell annotiert ist, wie gut waren denn, wie relevant sind die Ergebnisse, also wo Leute meistens auf einer Skala von 0 bis 4 oder 0 bis 3.
0 für, ist überhaupt nicht relevant zu 3 oder 4 oder das höchste ist halt super relevant für diese Anfrage.
Ergebnislisten annotiert haben und du dann halt hinterher sozusagen testen kannst, wenn du jetzt was an deiner Suchmaschine geändert hast und fütterst sie halt mit den Queries und guckst ihr die Result-Listen an, dann kannst du halt einen Score ausrechnen.
Gibt es dann unterschiedliche Maße, die man benutzen kann.
Ja, Mean Average Precision, Normalized, Cumulative, Discounted Gain, Expected Reciprocal Rank oder was auch immer.
Ich versuche jetzt dabei, mal kurz die alle drei Ergebnis zu erklären.
Aber im Grunde sind das alles Maße dafür, wie gut ist jetzt sozusagen dieses Ergebnis für die Anfrage.
Und ja, wenn ich halt über viele schaffe, besser zu sein als ein anderes Verfahren, dann brenge ich halt besser.
Dann habe ich halt ein besseres Ergebnis.
Und das ist ja etwas, was sich dann auch direkt bemerkbar macht.
Denn User-Zufriedenheit oder Geld oder was auch immer man halt mehr möchte.
Und naja, genau.
Normalerweise, wenn ich jetzt so ein, also Machine Learning-Modelle funktionieren da wirklich besser.
Also es gibt da schon, es gibt ja schon lange auch Wettbewerbe.
Ich glaube, ich habe mal an einer Learning to Rank Challenge mitgemacht, das war 2009 oder so.
Und wenn man das vergleicht, also was.
Doch, das ist ja schon über zehn Jahre her, das ist ja schon klar.
Ja, das ist krass, ne?
Und es ist immer, aber was ich dann, ich dachte eigentlich, also wenn man mich damals gefragt hätte, was glaubst du, wann können Suchmaschine, ist das so ein Standard-Features von Volltext-Suchmaschinen, hätte ich gedacht, ja, so in zwei Jahren oder so können die das alle.
Wir machen das aber immer noch nicht.
Also es ist ja zu sehen.
Also das ist so ein bisschen, hm.
Naja.
Aber wahrscheinlich braucht man ja dann doch irgendwie auch einen Markt dafür.
Und wenn es einfach keinen interessiert, dann passiert das halt auch nicht.
Und wenn es keinen Grund gibt, das zu implementieren, und den gibt es halt nur bei den großen Suchmaschinen und die machen das wahrscheinlich, aber die geben ihren Kram halt nicht raus.
Ach ja, ja.
Aber im Grunde, so könnte man halt, man kann halt, äh, also wenn man jetzt zum Beispiel, also daher weiß ich das auch noch, ich der F-EDF vergleicht mit einem einfachen Machine Learning-Modell, wo man halt ein paar Signale nimmt und die kombiniert und das halt dann optimiert hat.
Das ist halt schon wirklich deutlich besser.
Und das heißt, man kann ja relativ viel rausholen, was die Qualität von Suchergebnissen angeht.
Und das wäre eigentlich alles gar nicht so schlimm.
Ja, naja.
Ja, also falls ihr eine neue Suchmaschine braucht, dann sagt ihr einfach mal Bescheid.
Ja, das ist ja dummerweise auch irgendwie nicht so ganz so super live zu implementieren.
Das kann man auch nicht so an einem Wochenende machen.
Naja.
Aber also ich glaube, wenn man jetzt beispielsweise Postgres nimmt oder so und halt irgendwie Django und dann Volltextsuche drauf macht und dann halt kann man natürlich auch die eingebaute Rank-Funktion nehmen, die halt auch was TFEDF-mäßiges macht.
Und Redis dazu.
Ja, Redis, äh, oder man kann auch mal Redis ausprobieren, muss ich mal testen.
Dann ist man da schon, wenn man jetzt was, wenn das nochmal selber sortiert, schon relativ weit vorne, wenn man das dann richtig macht, ja.
Genau.
Du hast eine Sache, eben was man mit dem PAO irgendwas gesagt hattest, du wolltest du noch kurz drauf eingehen, ich weiß jetzt nicht, ob das noch richtig ist, ob das jeder schon vergessen hat.
Eine Methode zum Ranken.
Der exponentielle der
Du meinst die Potenzmenge, also du meinst halt, ja, also kommt drauf an, ist halt unterschiedlich für jede Seite oder für jede Suchmaschine.
Hängt halt von ab, welche Anfragen stellen, aber was man oft sieht, ist halt, dass eine kleine Anzahl von Anfragen, eine kleine Menge von Anfragen Großteil, also eine kleine Anzahl unterschiedlicher Anfragen macht ein Großteil.
Entschuldigung, das hattest du doch tatsächlich schon einigermaßen erwähnt, ja.
Das ist das, äh, genau, genau, das Problem hat man auch.
Ja, ansonsten, ich weiß nicht, was oder genau, wir hatten ja so SEO schon so ein bisschen, aber da würde ich auch noch gerne, also was man halt da, du sagst, Content, es ging ja aber, genau, das, was sich Leute oft nicht klar machen, ist halt, was das heißt.
Würdest du sagen, es geht darum, den optimalen Text zu schreiben für irgendeine Text.
Oder wie
würdest du sagen, was ist das, was Content gut macht?
Also ich würde sagen, Content macht gut, dass man, zumindest wenn man Google fragt, ja, dass man Absätze hat, die tatsächlich mit Inhalten gefüllt sind, die halt eine Wortdiversität beinhalten, die zu dem Thema einigermaßen passt.
Ja, dass halt, dass die Worte da irgendwie schon einen Kontextbezug zu haben, dass sie vielleicht auch bestimmte Dinge beschreiben, dass man halt nicht immer irgendwelche Keywords benutzt, ja, sondern dass man halt tatsächlich versucht, einen Text so darzustellen.
Und Google hat es irgendwie geschafft, so ein Maß dafür zu finden, ob so ein Text tatsächlich gut ist, ja, in dem Sinne oder nicht.
Und wenn man da halt, ich weiß nicht, mehrere Seiten vielleicht zu hat zu seinem Postern, wird erst als guter Content irgendwie bewertet.
Ich kenne tatsächlich jetzt auch nicht im Detail so die Bewertung für was ist jetzt guter Content.
Und das bewegt sich vielleicht noch ein bisschen und ob man das jetzt alles schön mit Bildern machen muss, mit Alttexten und so, dass man halt dann das qualitativ hochwertig implementiert hat.
Also die Implementierung ist, glaube ich, auch nicht ganz unwichtig.
Und wenn man das aber, glaube ich, wenigstens so tut, als hätte man das qualitativ hochwertig implementiert, indem man einigermaßen so ein Taktbisches vor der Sätze zu einem Thema hinschreibt, die dann auch so aussehen, als würden die zum Thema, weil die halt da mit dem TF-RDF-Wette irgendwie dann zu dem Thema gut passen, irgendwie, gibt es dann irgendwie einen Index, dann glaube ich, ist das schon einigermaßen ansprechender Content, zumindest für Google.
Und wenn man das dann halt schafft, da so eine Content-Pyramide, wie man das schon sagt, aufzubauen, das heißt zu einem Oberthema viele verschiedene Bereiche, die eigentlich zu diesem Oberthema gehören.
Also vielleicht machen wir das ja mit unserem Podcast zum Beispiel, ja, dass wir halt tatsächlich verschiedene Themen zu Python haben, dass aber alles Python ist und das hat irgendwie alles in Bezug zu Python, dann kommen wir tatsächlich in der Content-Pyramide Python immer wieder ein Stück weiter oben nach oben.
Natürlich haben wir jetzt keine Texte, die man so analysieren kann bei Volltext-Suche und nachdem man ranken kann.
Und wir haben halt nur irgendwelche Snippets oder Shownotes, mit denen man das tun kann.
Aber ich glaube so, also das funktioniert so ein bisschen so, was halt Content bedeutet.
Ja, aber das ist jetzt auch, würde ich eher sagen, auf einer sehr technischen Ebene.
Ja.
Und man kann, glaube ich, aber auch, also ich würde sagen, okay, also der technische Teil ist, macht auch einen nicht unerheblichen Teil aus, also man kann halt auch furchtbare Fehler machen.
Aber ein großer anderer Teil ist halt auch ein inhaltlicher.
Und der ist halt eben zum Beispiel, also was dann eben, ich bin wieder überrascht, man kann zum Beispiel auch unterschiedliche Seiten haben für unterschiedliche Anfragen und für unterschiedliche User.
Man muss halt erstmal überhaupt rauskriegen, was sind das für Leute, die auf meine Seite kommen.
Und möglicherweise gibt es da unterschiedliche Leute.
Möglicherweise stellen die unterschiedliche Suchanfragen.
Und dann kann es zum Beispiel gut sein, das ist auch etwas, das kennen bestimmt viele Leute.
Wenn man sucht nach irgendwas, dann landet man auf einer Seite von irgendeiner Firma, die irgendwas anbietet oder so.
Und scrollt da die ganze Zeit rum und denkt sich so, was wollen die mir eigentlich erzählen?
Stock-Fotos und dann irgendwie die gleichen Buzzword, Bingo, Dinger, die auf allen Seiten sind und ich scroll da eine Viertelstunde drauf rum und ich verstehe nicht, was das eigentlich ist.
Ja, das ist dann eher.
Das hat man oft, ne?
Aber die Frage ist, warum müssen die eigentlich allen die gleiche Landingpage zeigen?
Das müssen die doch gar nicht.
Aber das kommt dabei raus, wenn du sagst, okay, ich mache eine Landingpage für alle die gleiche, dann kriegst du halt sowas.
Aber das müsste eigentlich gar nicht sein, sondern das, was die sich überlegen müssten, ist halt, okay, wenn jetzt jemand nach bestimmten technischen Geschichten sucht, dann geben wir dem doch.
Hintergrundnabel blau.
Ja.
Nehmen wir dem vielleicht noch eine Seite, wo tatsächlich steht, was wir machen.
Und wenn jetzt irgendwie, keine Ahnung, eher ein businessorientierter User halt nach den üblichen Buzzwords sucht oder so, den gut, den kannst du ja dann vielleicht irgendwie klappen, vielleicht kriegst du den irgendwie mit Stock-Fotos glücklich gemacht.
Ich weiß auch nicht warum, aber.
Du bist überhaupt dazu, dass wir diese Datenkrake brauchen, wenn wir damit Geld verdienen wollen.
Das ist der Grund dafür, warum man so sehr interessiert ist an dem Typen von Nutzer, den man jetzt da vor der Kiste hat, weil es geht ja eigentlich darum, dass man den irgendwie emotionalisiert und nicht nur, dass man dem einen tollen Content zeigt, sondern dass man den dann, also wenn wir jetzt bei der ganzen Geldmaschine ausgehen, den dazu bringt, dass der da irgendwas kaufen soll.
Der für den Kapitalismus halt so ist, der möchte dich emotionalisieren und dir das zeigen, was du willst.
Ja, ich weiß, ich kann, aber ich meine, jetzt so nur rein aus dem Suchmaschinenkontext, was man jetzt damit macht, ist ja nochmal eine andere Frage.
Klar, will ich eventuell Leute hinterher, will ich ja irgendwie, die konvertieren zu was auch immer, Umsatz.
Die konvertieren zu.
Das ist total schön, wenn man von Leuten redet, wir möchten die gerne konvertieren.
Wir möchten unsere Hörer übrigens konvertieren zu besseren Pythonisten.
Genau, man muss sich halt überlegen, was man für Ziele eigentlich erreichen will.
Aber damit das überhaupt funktionieren kann, damit ich überhaupt die Chance kriege, muss ich ja irgendwie vielleicht, oder macht es vielleicht Sinn, den Leuten halt etwas zu zeigen, was sie dann halt auch verwenden können, was sie verstehen können, was relevant für sie ist, ja.
Und das passiert oft nicht.
Sondern ganz oft ist es halt so, alle kriegen das Gleiche, egal wonach sie gesucht haben, dabei, das weiß ich doch, wonach sie gesucht haben.
Ich muss ja jetzt nicht irgendwie wissen, wer das ist.
Das interessiert mich gar nicht.
Ich weiß doch, wonach die gesucht haben.
Ja, warum zeige ich denen alle das gleiche?
Das macht überhaupt keinen Sinn.
Aber es gibt die Vorstellung, dass das halt so sein muss, woher auch immer die kommt.
Und dass es halt dann so ein eben technisches Ding ist, welche Farbe nehme ich da oder welche Fotos, wie ist der Anteil von Fotos zu Text, dass das dann irgendwie gut macht.
Aber wenn da nicht steht, was mich interessiert, dann kriege ich das nicht wieder gut gemacht durch irgendeine Farbe.
Das ist einfach, da hast du mich schon verloren im Grunde.
Also das, was du gerade gesagt hast, ist, dass der Content King eigentlich bedeuten sollte, ich kriege genau das, was ich möchte, weil es so präenvertisiert und gefiltert ist, dass deine eigene Blase so gut zu dir passt, dass du da genau das findest, was du machst.
Es müsste sich jemand Gedanken drüber gemacht haben.
Das ist halt das Entscheidende.
Jemand muss sich zum Beispiel angeguckt hat.
Es gibt eine bessere Korantierung durch den Suchalgorithmus.
Nee.
Jemand sollte sich überlegt haben, zum Beispiel, wir sehen jetzt gerade bei dem, wir sind das Dokument, nicht, wir sind die Suchmaschine.
Was Google macht, ist nochmal ein anderes Ding, aber.
Da müsste sich jemand überlegt haben, okay, wonach suchen die Leute?
Wenn die Leute auf der Seite landen, wonach haben die gesucht, ist das wirklich das, was sie suchen?
Wenn sie danach gesucht haben, kriegen die Seite, wäre es nicht sinnvoll, ihnen eine andere Seite zu zeigen.
Ja, solche Sachen.
Überhaupt so etwas, was ich glaube, was tatsächlich sehr sinnvoll wäre unter Umständen, dass halt Unternehmen halt für unterschiedliche Zielgruppen, unterschiedliche Leute, unterschiedliche Suchanfragen, unterschiedliche Seiten haben, das gibt es praktisch nicht.
Weil irgendwie die Vorstellung ist, das ist wie in der physikalischen Welt, du hast halt ein Schaufenster und das ist halt für alle gleich.
Aber das muss man ja gar nicht so machen unter Umständen.
Aber das ist halt sehr schwer zu vermitteln.
Aber wenn du jetzt zum SEO gehst, der so wie Content-Strategie machst oder so, dann sagt ihr dir vielleicht einfach, boah, kann das auch anders machen.
Aber wenn du jetzt zu einer technischen SEO-Agentur gehst, die dir sagst, okay, ich verkaufe dir so und so viel Backlin, dann hilft dir das.
Also sagen wir so, es gibt halt nicht nur den technischen Teil, sondern halt auch den inhaltlichen Teil und der wird halt, der inhaltliche Teil wird, soweit ich jedenfalls üblicherweise mitbekomme, immer sehr vernachlässigt.
Die Leute kümmern sich immer um technische Details und dann oft auch um Sachen, die eigentlich fragwürdig sind und lassen da eine ganze Menge gute Gelegenheiten einfach so liegen.
Ja, aber.
Der klingt halt, als wäre es auch, wenn nicht das zu implementieren würde.
Ja, ist es.
Ist es tatsächlich.
Also das ist halt auch der Grund, warum es keiner macht.
Ja, genau, und was die Leute, die das halt implementieren offen und denen halt dann die Content machen, vielleicht auch dann nicht auf dieser technischen Seite sind, beziehungsweise dass dann, ich sage einfach mal relativ teuer wird und mal das zu implementieren, ja, nicht so einfach ist für die Zielgruppe, die dann gerne ihren kleinen Straßenlädchen optimieren möchte.
Das vielleicht auch so ein Problem.
Ja, aber die großen Kunden, hast du schon mal gesehen, also dass so wirklich so diese Pages wirklich dann sich ändern, je nach Suchanfrage?
Ja.
Wo?
Nein, du packst einfach, das ist überhaupt nicht schwer.
Nein, ich sage nur, hast du ein Beispiel, wo du sagst,
ändert sich nicht nach Suchanfrage, sondern du hast halt unterschiedliche Pages im Google-Index.
Und bei unterschiedlichen Anfragen werden unterschiedliche Seiten gefunden.
Ja, okay, okay, okay.
Kannst du machen.
Das ist gar kein Problem.
Ja, das habe ich dann.
Ja, okay, das ist natürlich, ja.
Ja, also man hätte quasi für jedes schöne Keyword-Kombination seine eigene Landedpage raus.
Ja, oder die muss nicht für jede Kombination, aber du musst halt gucken, also man würde damit anfangen zu gucken, was suchen die Leute eigentlich?
Mit welchen Anfragen landen sie?
Oder auch, wenn ich mich jetzt dafür interessiere, was würde ich denn suchen und wie schaffe ich es dann, dass ich dann auch da gerankt werde.
Und dieser Schritt, das ist ja das Allersimpelste, dass man halt anfängt, sich zu überlegen, okay, wie kommen Leute eigentlich hin, das machen die meisten schon nicht, sondern die gehen halt umgekehrt von der Seite aus, die sie halt bauen, und sagen dann, okay, ich habe jetzt diese Seite, völlig unabhängig davon, ob das irgendjemand interessiert oder nicht, wie kriege ich die denen jetzt hochgerankt?
Und dann packen sie da irgendwie komische Wörter rein oder kaufen Links oder machen irgendwie seltsame Dinge, ändern die Farben, verstecken weißen Text auf weich im Hintergrund.
Ja, oder kaufen hell Hits bei Google oder sowas noch.
Und wundern sich dann, dass die Leute irgendwie, wenn sie halt quasi da landen, dann irgendwie enttäuscht sind.
Ja, aber diese ganzen Tricksdaten mit den Sachen verstecken hinter weißem Hintergrund und mit den extra Keywords und so viel Links, das hat, glaube ich, Google mit den ganzen neuen Pads alle raus.
Die sind da sehr gut, also das wird alles nicht so richtig richtig funktioniert.
Ja, es wird sogar bestraft, also du wirst tatsächlich abgerankt, wenn du sowas machst noch.
Also wenn die solche Methoden finden, die können die identifizieren, dann schmeißen sich raus, das wird bestraft.
Würde ich jetzt, wenn ich jetzt nicht genau, worum man das machen sollte, weil im Grunde ist es ja, ich würde sie Google werden ignorieren, weil.
Ich habe gehört, dass das tatsächlich drin steht.
Ich weiß nicht, was für Google Dolphin oder was war.
Warum haltet das denn für Google?
Ja, dass halt nur noch Sachen gerankt werden, die halt diesen Content-Qualitätsding besser machen können.
Das heißt, weil die halt auf diese Qualitätssachen.
Warum?
Und Leute, die halt dann versuchen, mit Keywords das einzubinden, die legen nicht so viel Wert auf guten qualitativ hochwertigen Content.
Ja, aber damit, dann würdest du sagen, du kannst eine Regel aufstellen, die funktioniert.
Du sagst, Leute, die irgendwie so shady Geschichten machen oder die halt die falsche, sich halt von dem falschen See von der falschen SEO-Agentur übers Ohr haben hauen lassen, die sind halt prinzipiell nicht gut.
Genau.
Da weiß ich nicht, ob diese Regel wirklich stimmt.
Ich würde tatsächlich das eher dann aus Trainingsdaten lernen lassen, ob das so ist oder nicht.
Weil diese Annahme muss ja nicht richtig sein.
Es kann ja sein, tatsächlich, dass irgendwie der Hotdog stand um die Ecke, der eigentlich total super Hotdogs macht, hat aber jetzt nicht so die perfekte SEO-Auswahl-Kompetenz und greift da halt ins Klo.
Da würde ich den gar nicht dafür bestrafen wollen, unbedingt dafür, dass halt seine SEO-Agentur kacke ist.
Sondern ich würde das ignorieren.
Okay, interessant.
Aber ich glaube, also Google hat das tatsächlich gemacht, das steht irgendwie in den Rules da drin.
Aber ja.
Ja, ich weiß nicht.
Dann sollte man vielleicht nochmal drüber nachdenken, dass es sowieso, also ja, ja gut, aber ich hoffe, jetzt so Restaurants bewerten über Wax.
Aber das haben wir, glaube ich, heute nicht mehr die Zeit für und das ist auch nicht unser Thema.
Warum, wieso weshalb dann welche Sternchen vergeben werden sollen, sollten, sollten, nicht sollten.
Ja, aber genau, Sumaschinen.
Haben wir noch irgendwie ein großes Thema oder so, was da drin ist, was wir noch gar nicht angeschnitten haben oder was irgendwie
ich glaube, die großen Sachen haben wir einigermaßen durch.
Wir haben so ein bisschen erklärt, wie es funktioniert, was für Algorithmen dahinter stecken.
Wir sind jetzt nicht ganz so detailliert eingegangen auf diese ganze mathematische Komponente von den Wertberechnungen, aber das ist vielleicht auch einfach hier eine Stelle too much.
Wir haben vielleicht noch wieder mal, leider, ein bisschen wenig erzählt, wie man das in Python macht, also außer wir gesagt haben, dass das irgendwie so Pyleusinen und Wusch gibt, habe ich jetzt und natürlich Postgres und damit das mal in Dangerous implementieren kann.
Ja, also aber genau, vielleicht wenn man, also ich finde auch gerade Python ist super geeignet dafür, weil dann kann man diese beiden Dinge halt total gut miteinander kombinieren.
Man kann halt zum Beispiel irgendwie diese ganzen Ranking-Geschichten halt wahrscheinlich, also ich denke mal, es müsste eigentlich, so Python ist wahrscheinlich die Sprache, mit der das am besten geht.
Wenn man halt eben diese ganze NumPy, Sci-Pi, Machine Learning-Geschichte mit dranhängen hat.
Das heißt, selbst wenn man jetzt nicht unbedingt ein Machine Learning-Modell verwendet, aber halt diese Listen oder sagen wir mal so Vektoren von Features halt irgendwie auch mit handgedenkelten Listen schnell zwänken, das geht mit Python wahrscheinlich sehr, sehr gut.
Und bei anderen Sprachen hätte man da wahrscheinlich so ein bisschen.
Naja, aber man hört sich an, das braucht man auf jeden Fall erstmal Content, bevor man irgendwie eine vernünftige Suche implementiert.
Ja, tatsächlich, das ist wahrscheinlich auch nicht so schlecht.
Weil sonst kann man ja selber aussuchen, was da da rauskommt.
Ja, und genau, und das ist halt.
Ich weiß jetzt gar nicht, ob es ein großartiges anderes, also ist das alles Web heutzutage.
Ja, ne?
Gibt es irgendwie noch eine.
Es gibt bestimmt noch irgendwelche Studierendatenbanken, wo man dann nach wissenschaftlichen Texten suchen kann.
Oder die Juristen sind sehr gerne dabei mit irgendwelchen Volltext-Sachen, irgendwelchen Gesetzestexten und Urteilsverkündungsgeschichten, was welches.
Aber das wird auch alles eher mehr oder weniger webbasiert laufen.
Ja.
Es gibt bestimmt noch mehr, wenn ich noch genug nachdenke.
Ja, aber es ist, glaube ich, heutzutage eigentlich das meiste Web, was man da so macht.
Ja, oder selbst wenn es irgendwie auf Mobilgerätten ist oder so, dann wird man wahrscheinlich eine API-Anfrage machen und also letztlich wird es auch wieder App sein.
Ja.
Ja, ich wollte eigentlich auch schon immer mal, das mache ich auch vielleicht mal irgendwie einfach irgendwo ein Repository anlegen und dann mal Dinge miteinander vergleichen.
Zum Beispiel einfach einen Standardkorpus von irgendwie oder mehr irgendwelchen Dokumenten halt in eine Postgres reinhauen, in Redis reinhauen, in eine Elasticsearch reinhauen und mal gucken, was sind so die Unterschiede und was macht irgendwie großartig Schmerzen und was halt nicht so, was ist angenehm.
Gut, dass du das jetzt bei einer Stunde 30 gesagt hast, wo vielleicht einige Hörer schon eingeschlafen sind.
Aber das Versprechen ist aufgeschrieben.
Ja, das ist vielleicht genau.
Dann muss ich, sag ich nochmal Bescheid.
Also ich meine, es ist auch teilweise nicht so einfach.
Bei Django ist es so, dass halt, wenn man da einfach nur das macht, was in der Dokumentation steht, funktioniert es auch nicht so richtig.
Das ist schon so ein bisschen hakliger.
Aber das muss ich mir nochmal auch nochmal genau angucken.
Ja, du fragen, dass ihr Fragen dazu habt, stellt mich die gerne wieder per E-Mail.
Hallo.python podcast.de.
Ich würde sagen, wir sind aber jetzt mit der Suche so quasi durch und wollten jetzt noch Pick der Woche machen und so.
Ja, ja.
Oder hast du noch was, was du zur Suche sagen willst?
Ja.
Gut.
Ja, dann ich nehme jetzt deinen Pick weg.
Den musst du später machen.
Also Armin Ronacher von Flask, der Mensch, der Creator, hat etwas Schönes vorgestellt und hat er einen kleinen Patch eingebaut.
Das heißt, er nimmt einfach die Build-Hins und packt da Drachen dran.
Und zwar True, False und Null, jeweils in klein geschrieben und setzt sie auf True, False und None, äh, null.
Und dann kann man einfach JSON lesen.
Ja, beziehungsweise halt einpasten und
JSON und ist direkt ein Dictionary-Object.
Das ist schon relativ interessant.
Ist schon
eine gute.
Ich wusste gar nicht, was man das so machen kann und dachte mir so, das geht, aber cool.
Der erste Kommentar über diesen Twitter-Feed, von dem du das gefunden hast, ist übrigens, I strongly recommend not doing this, it opens up a huge security hole.
Ja, ja.
Es ist security völlig überbewertet.
Aber ja, es ist sehr interessant und lustige Sachen sind da möglich, wenn man was wie die Build-Ins einfach überschreibt, ja.
Also ich habe diesmal tatsächlich kein Modul zum Picken, aber ich habe ein wunderschönes GitHub-Repository entdeckt, was die Algorithms heißt.
Und da gibt es einen Folder mit Python.
Da gibt es quasi alle Algorithmen, die man so irgendwie mal für Python gebaut hat.
Die sind jetzt alle nicht perfekt implementiert oder besonders schnell, aber man sieht so ein bisschen, wie das Prinzip dahinter steckt.
Also ob ihr jetzt Suchalgorithmen habt, Suchalgorithmen, ja, oder Sortieralgorithmen oder für Wetbringing oder Matrizen oder mathematische Sachen und Machine Learning oder Algebra oder wie man Images was macht, wie man Hashes errechnet oder so, welche gut sein sollen.
Das steht alles drin.
Zeit, Verschlüsselung, Kompression.
Könnt ihr euch alles mal angucken, ist eine tolle Bibliothek.
Einfach so Algorithms Python on GitHub.
Sehr interessant.
Achso, und was ich noch fast ganz vergessen habe, wir haben ja letztes Mal über Environments gesprochen.
Und ich habe es tatsächlich geschafft, nach ein bisschen Struggle, meine Environment, ich habe ja eine große Windows-Entwicklungs-Environment, auf umzustellen auf PyEntwon Poetry.
Und habe das auch auf GitHub mal dokumentiert, wie das denn eigentlich geht.
Falls ihr das irgendwie vorhabt, ich empfehle da, wenn ihr das mit Poetry machen wollt, schmeißt alles Python, was ihr schon drauf habt, einmal weg, weil es sonst Hakeligkeiten mit eurem Pfad geben kann.
Dann müsst ihr vielleicht auch einmal komplett aufräumen und putzen.
Weil die Inventierung PyNWin, das so ein bisschen komisch löst, die wird eure Windows Libraries mit einem grafischen Installer dann installieren, also die Python-Version, dass das ein bisschen anstrengend, aber dann passiert das alles automatisch und ihr habt diesen ganzen Struggle nicht und dann könnt ihr Poetry und PyN wunderbar kombinieren.
Auch mit eurer PowerShell.
Es geht aber leider nicht so gut mit Toku.
Also nehmt nicht die Toko-Version, sondern versucht das aber das GitHub-Repository zu ziehen.
Kann ich empfehlen.
Ich habe da auch ein paar Skürdschule geschrieben, die es automatischer machen können.
Wollte ich nochmal so kurz für die Menschen, die tatsächlich noch mit Windows arbeiten machen.
Ich habe in NixOS reingeschaut, das gefällt
mir richtig.
Okay.
Ja, das ist auch eine sehr coole Idee.
Ja, dann bin ich aber noch dabei, meine Python-Implementierung zu bauen und mal gucken, ob ich das so weiterführe.
Ja, aber das hatte relativ wenig mit Suchmaschinen zu tun.
Aber das war so für den Pick der Woche.
Haben wir irgendwas vergessen?
Ja, mir ist jetzt doch eingefallen nicht.
Also in dem Moment, wo ich gesagt habe, so haben wir nicht noch irgendwas vergessen.
Ich hatte schon das Gefühl, wir haben irgendwas vergessen und ja, haben wir auch, aber egal.
Und zwar gibt es halt noch einen ganz nicht unerheblich großen Teil Volltextsuche, wo es nicht um Dinge geht, die jetzt ja so traditionellerweise da so, also dass man Querys hat, die man so gut in Tokens zerlegen kann, oder wo man halt Tokens sucht, sondern solche Sachen wie Autocomplete in einer Suchbox hat.
Ja, okay.
Oder wo man halt einfach nur ein paar Buchstaben hat und möchte das halt finden.
Oder man möchte halt irgendwie ein Teil von einem Wort finden, irgendwo drin.
Und das ist halt nochmal so ein bisschen anderes Problem und braucht halt ein bisschen andere Datenstrukturen dafür.
Und ja, das vielleicht machen wir das auch einfach mal in einem anderen Sinne.
Okay, machen wir dieses Fass nicht nochmal auf.
Aber das hätte eigentlich ja eventuell auch noch dazu gehört, weil das ist auch ein nicht unerheblich großer Teil, der halt auch im Grunde ist ja auch Volltextuche und das ist nur ein bisschen anders.
Ja, okay.
Naja.
Ja, dann das nächste Mal.
Also wenn ihr Fragen dazu habt, dann gerne wieder an Hallo-Pythonpodcast.de, das haben wir schon gesagt.
Mögt uns und folgt uns auf allen Dingen, die wir so posten.
Schreibt uns, freut uns auf euch.
Bleibt uns gewogen, hört uns immer morgens, mittags, nachts, abends.
Und ja, bis zum nächsten Mal.
Jo, alles klar.