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 Dominik und neben mir ist der Jochen.
Ja, hallihallo.
Grüß euch.
Wir sind wieder auf der Raumschiffbrücke heute.
Genau.
Erneut. Schön hier.
Ja, genau, Volltextsuche, um es genau zu sagen.
Ja, ah oh, Volltextsuche, ja.
Ja, aber wollen wir das eigentlich, oder ich meine, wir können einfach ganz normal starten, so mit News und Dings, ne?
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 Millionen 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 pythonpodcast.de,
schickt uns einfach eine Mail.
Oder kommentiert fleißig auf unserer Seite.
Ja, News aus der Szene.
Heute ist der Erscheinungstag von Python 3.8.2.
Ja, ist noch nicht raus.
Ist aber noch nicht da.
Ist noch 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.
Wir sind unbezahlt nach Hause gekommen, ja.
Ne, ich war heute heute eine der wenigen Leute, die irgendwie im Büro saßen und so.
Es war sehr angenehm, wir haben ein bisschen was geschafft gekriegt.
Ja, und da da eben, wenn du auf die Straße gehst und so aussiehst, wärst du schon verkleidet,
ist das auch gar nicht groß aufgefallen.
Ja, ja, ja.
Horror-Clown.
Kann ich empfehlen.
Ja.
Sehr gut.
Ja, wir machen heute Volltext-Suche.
Und ja, News 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 los, ne?
Ja, war nicht so viel los.
Gehst du hin zur Euro-Pheisen?
Ja, ja, ja.
Ja, schön, cool.
Wir müssen uns nur noch irgendwie mit Kindergarten und so erklären.
Ah, ja.
Wir machen ja auch irgendwie Betriebsferien und so, aber eigentlich schon, ja.
Ja, sonst musst du alleine.
Ich habe mir schon eine Wohnung organisiert.
Also, falls noch jemand eine WG sucht oder sowas, sag mir Bescheid.
Ja, was gab es noch?
Es gab so einen tollen Tweet, hast du gesagt, von Armin Ronacher.
Das ist der Haupt-Dev, der Entwickler von Flach.
Ja, aber das wollte ich eigentlich später erst picken.
Ach, das wolltest du picken?
Ja.
Ach, das ist ein Modul.
Ne.
Ich dachte, wir picken Module, Jochen.
Ja, heute nicht.
Oh Gott, jetzt hat es dich ernannt.
Ja, okay, dann picken 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 Standard-Bibliothek uns vornehmen.
Ja, gute Idee.
Ja.
Und das nehmen wir Parslip.
Parslip, ja.
Ja.
Genau.
Das immer wieder, wenn ich...
Wenn ich halt irgendwie in Code herumnavigiere und sehe dann irgendwo so Import, ja, OS und
dann halt OS-Pars und so und dann machen Leute dann Dinge, dann denke ich mir, ach, es geht
zu viel schöner mit Parslip.
Also vielleicht nochmal kurz, was Parslip ist.
Parslip ist ein Wrapper oder ist das eine komplett neue Implementierung?
Das ist ein Modul aus der Standard-Bibliothek.
Ich weiß jetzt gar nicht...
Über OS-Pars.
Nee, das ist kein Wrapper um OS-Pars.
Okay.
Nee, nee.
Das ist halt auch so ein bisschen...
Manchmal ist es so ein bisschen unübersichtlich.
Es gibt einige Module in der Standard-Bibliothek.
Okay.
Die halt so ein bisschen das Gleiche machen.
Unter anderem halt eben OS-Pars und dann Shell-Utils, also SH-Util.
Macht auch so ein bisschen das Gleiche, aber so ein bisschen eine andere Regenschmacksrichtung.
Parslip 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 Parslip
das, was man eigentlich haben will.
Und das ist auch so richtig...
Ich glaube, das ist auch jetzt 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 Mounts dazugekommen in 3.7.
Also nur in aktuelleren 3.
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 anzeigen oder Content anzeigen, gucken, ist es ein Verzeichnis, ist es kein Verzeichnis,
ist es eine Datei.
Ja, genau.
Das Hauptfeature finde ich, dass man damit halt relativ einfach Pfade so hinschreiben
kann, ohne jetzt irgendwie viel Boilerplate-Code außenrum schreiben zu müssen, wenn man jetzt
aus Parse joinen und dann die Liste, das ist halt immer so ein bisschen...
Und jetzt kann man halt einfach, man schreibt halt ein Slash und dann macht dieser Operator
sozusagen eine Verkettung der Namen, die man da...
Ja, das kann man aus dem Dateisystem eigentlich auch kennen.
Ja, genau.
Genau.
Dann sieht das halt im Code fast genauso aus, als würde man es auf die Shell schreiben.
Und das ist 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 MP3.
Oder auch mit, das geht auch.
Oder mit oder nur das Suffix oder so.
Solche, 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 sehr angenehm.
Das ist halt total nett.
Genau.
Ich muss gestehen, als ich mit Python angefangen habe, gab es das schon.
Und deswegen habe ich OS-Path nur ab und zu mal angesehen und gesagt, ist das hässlich,
dann gesehen.
Ja.
Ach ja, okay, das gibt es jetzt, Pathslip.
Ja, ja, ja.
Ich stolper fast täglich über Code, wo halt noch OS-Path verwendet wird und nicht die Pathslip.
Ja, ja, ja.
Auch ganz oft in Dango ist das auch ganz oft drin in der Settings oder sowas.
Ich bin erst einmal irgendwo drüber gestolpert, wo es nicht mir gelang, das zu entfernen.
Ich bin mir halt nicht sicher, ob das an meinen Fähigkeiten lag oder an der Implementierung.
Ja, die brach dann einfach durch, weil ich Pathslip-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-Path gemacht hat und jetzt wie man es mit Pathslip machen kann, Tabelle und da findet
man dann meistens schon die Tabelle.
schon die Funktion, die man sucht. Stellen wir euch in die Show los.
Ja, genau. Also, genau.
Damit haben wir das tatsächlich
mal gemacht.
Wir wollen jetzt tatsächlich das Einzeltreifen, was auch das
gemein 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 Pics haben wollt oder erstmal direkt das
Thema, bevor wir irgendwas über News erzählen.
Ja, aber trotzdem, dann machen wir
Volltext-Suche weiter und ich werde dich löchern damit.
Oder wollen wir noch ganz kurz
ein Meta-Ding
kurz, also ich überlege
gerade, weil mich hatte der Katze
eine Mail,
wo
wir
packen wollen, ob wir nicht
mehr Dinge erklären könnten.
Ach so, stimmt.
Ich kann das durchaus verstehen. Also es ist halt
viele Sachen, die man einfach so
vor sich hin redet und nicht
drüber nachdenkt, die zu erklären, dann
wird es halt schnell unverständlich.
Aber auf der anderen Seite
ist es halt, glaube ich, schwierig.
Ja, es ist ein Trade-off. Einige Menschen, die kennen das halt schon alles und wenn man dann
jeden Schnipsel erzählt, ist es vielleicht uninteressant.
Dann wird es für die uninteressanter. Und die Frage,
an wen wendet man sich da eigentlich?
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 auch in einer der Folgen. Ich glaube, das ist
vielleicht eine gute Idee.
Und ja, 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...
Ich komme darauf, weil letzte... Ich höre ja auch noch
viele andere Podcasts. Ich höre zum Beispiel Philosophische Radio
auf WDR 5
oder
die Radio Business. Ich weiß jetzt gar nicht, auf welchem Sender.
Ich höre es ja nur aus Podcasts.
Ich höre einen tollen Hockey-Podcast.
Genau, und die
sind der Meinung, dass sie da auch irgendwie Podcasts
machen und sagen, sie können das. Aber das ist kein Podcast,
sondern das hat halt irgendwie eine...
eine Zeitbegrenzung.
Und dann am Schluss fangen die auch mal an so...
Das müssen wir jetzt noch schnell sein.
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.
Da ist halt ein großer Unterschied. Und dann ist
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 nicht irgendwie
veröffentlichen.
Auf der Seite,
wann wir die nächste Podcast-Folge aufnehmen,
sind Anrufer zugelassen.
Genau, das macht natürlich...
Ich verstehe natürlich, dass es bei einer
Live-Sendung den Reiz enorm erhöht.
Oder wenn man halt irgendwie auf Twitter
nebenher drüber lästern kann, was die gerade wieder
erzählen. Das 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.
Aber eben nicht Podcast.
Weil für mich Podcast ist eher so das, was ich dran mag.
Ist halt etwas, was man eben
in diesen Massenmedien-Kontexten
halt nicht kriegt. Nämlich zum Beispiel,
was mich eben bei so einem Thema wie jetzt Philosophie
oder so eigentlich interessieren würde, wäre genau das,
was wir versuchen,
jetzt Bereich Python 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 Studierest oder so.
Und den Philosophischen Circle in der Stadt.
Also, ja, vielleicht muss man
da hingehen. Keine Ahnung.
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, dass 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
das Ziel, irgendwie möglichst viele Leute zu erreichen.
Sonst müsste ich ja nicht das irgendwie
über Radiowellen
nach draußen senden.
Aber ist das eigentlich immer das, was man haben will?
Da bin ich mir nämlich gar nicht so sicher.
Also wir haben jetzt den kleinen Exkurs. Jochen redet nicht halber
Podcast.
Sorry.
Ich meine, man kann ja auch auf andere
Dinge optimieren. 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.
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 Podcasts und ich hoffe,
dass alle unsere Hörer auch tatsächlich wegen Python
und diesem und vielleicht auch, weil sie Lust drauf haben oder warum auch immer.
Also keine Ahnung, kann auch sein, dass ihr unsere
Stimmen so schön findet.
Aber zum Einschlafen.
Ja, das ist eigentlich...
Das ist keine so schlechte Idee. Nur nicht beim Autofahren und Einschlafen kommen.
Aber naja.
Aber ja, also ich meine, das ist halt etwas,
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,
ist 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 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.
Ihr klärt 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.
Was ist das überhaupt, Volltextsuche?
Also wir wollen ja ganz Basis anfangen und erklären.
Was macht eine Volltextsuche?
Warum heißt es Volltext und was ist 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, also,
ich meine, das ist auch ein Suchproblem,
sozusagen, wenn man versucht, in einem Text
irgendwas zu finden,
aber
Volltextsuche will das über viele Texte finden.
Ja, also der entscheidende Unterschied
ist eigentlich, dass man halt Dokumente hat
bei einer Volltextsuche.
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.
Das Paper, das du benutzt, damit du
deine Hausarbeit nicht zweimal schreiben musst
oder einfach die nehmen kannst, die du findest.
Einfach, ne?
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, nicht Glossar, erklärt ja die Begriffe, aber
ein Index tatsächlich gibt es oft in Büchern.
Ja, okay, also da gibt es dann noch, zu welchem Hit,
welche Seile.
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 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, dann hast du halt eine kommaseparierte Liste
der Seiten, auf denen das vorkommt.
Das ist jetzt auf den
Volltextsuche-Dings.
Ja, wenn du es voll übertragen, wäre das halt so, dass die
Seiten in dem Buch wären halt die Dokumente,
die indiziert werden und der Index
in dem Buch ist tatsächlich dann halt so,
wie ein Volltext-Suchindex,
sehr ähnlich zu dem,
was man dann tatsächlich auch verwendet.
Und was hat das jetzt mit Python zu tun, Jürgen?
Ja, also
Oh,
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 man viel zu wenig
Suchmaschinen, es sind viel zu wenig
Volltext-Suchmaschinen in Python implementiert.
Aber so ist es halt.
Aber zumindest, dass man
die irgendwie ansprechen muss und dann
irgendwas mit den Ergebnissen macht, das hat man ja relativ oft.
Welche hatten denn Suchmaschinen? Es muss ja erstmal eine Beispiel
geben für Volltext-Suchmaschinen, die man vielleicht
kennt oder auch nicht, oder?
Also da gibt es halt unterschiedliche,
es gibt natürlich die
große Google, die allwissende Müllhalde,
die wir alle kennen,
die wir kennen.
Vielleicht mit den entsprechenden Vorgängern,
so weiß ich nicht, Excite, AltaVista,
Hotbot.
AltaVista, 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 einen Microsoft-Suchmaschinen erwähnt, erneut.
Die haben aber immer noch keinen Contract leider
bekommen.
Oder
A9 von
Amazon,
wo auch einer der Experten
oder die Member,
hat er 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 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 Suchfunktionität
anbieten. Und ja,
dann muss das halt irgendwie
irgendwo passieren.
Und das,
was es da,
das, was da sozusagen
der Platzwürsch ist, ist
eine Java-Bibliothek
namens Lecine.
Ist von Duck 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 meinte so, da habe ich irgendwo mal
im Talk gehört,
hat er so, ja, so
1997, hat er so das Gefühl, die Dotcom-Bubble,
die platzt jetzt demnächst.
So, hat noch ein bisschen gedauert, aber war
gar nicht so schlecht. Und
hat sich dann
sozusagen
einen Teil der Woche, ich weiß nicht, ein oder zwei Tage
Homeoffice
setzen lassen und dann
an eben der neuen Suchmaschine
gebastelt. Und als dann
Excite tatsächlich irgendwie
so ein bisschen
die Ohren angelegt hat,
hat er das halt dann
Open Source,
eine Open Source-Geschichte überführt. Auch da,
ohne groß drüber nachzudenken, was man da jetzt macht.
Er hatte, 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
weil man das ja noch nie gemacht hat,
weiß man ja nicht genau, was man da alles machen muss.
Mailing-Listen und wie organisiert man diese
ganze Entwicklungsgeschichte überhaupt.
Und er ist dann irgendwie mit dem Lucene-Projekt
dann da unter diesen Apache-
Sturm der Apache Software Foundation gekommen,
hat dann auch die Apache-License übernommen und
meinte, seitdem hat sich nie wieder jemand
über die Lizenz beschwert und es funktioniert.
Also es ist halt eine sehr liberale Lizenz, so
PSD-artig, MIT-artig.
Lizenz müssen wir auch nochmal neu entdecken.
Aber im Grunde heißt,
kann man dann mehr oder weniger machen, was man will.
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 weiß Lucene.
Man kann das auch aus Python heraus
direkt verwenden mit PyLucene.
Ja.
Aber das ist ein bisschen eklig.
Also das ist halt,
das macht halt direkt eine Anbindung
an Java.
Hört sich komisch an.
Ja, also geht schon,
aber will man vielleicht auch nicht verwenden.
Eher ist es 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 Elasticsearch
oder vielleicht Solar Cloud
auf irgendeinem Pflaster laufen oder weiß nicht.
Und auf deinem Hadoop-Cluster am besten.
Und dann connectest du dahin und
stellst da deine Suchquerys
an Fragen.
Ja, genau.
So sieht es halt irgendwie momentan aus.
Aber das ist natürlich,
also okay, es ist das Verbreitetste.
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
äh
Open-Source-Suchmaschinen,
Suchmaschinen wären sowas wie, es gibt noch
Xapien, obwohl ich weiß nicht, ob es das tatsächlich noch gibt.
Das war irgendwas in C++,
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 Volltext-Suche
vom MySQL nicht mehr verwenden will
oder wenn man da rausgewachsen ist, dann kann man da irgendwie relativ
leicht Sphinx dran bauen.
Ja, ähm.
Ja, 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, ich sag mal, auf was bitte ist denn das?
Klar, da rein.
Und was das dann überhaupt macht, wo die Dokumente liegen
und wie das dann überhaupt so richtig funktioniert und so.
Ja.
Genau, genau.
Ich wollte gerade,
ach genau, es gibt eine
in Python implementierte
Volltext-Suchmaschine
namens Woosh.
Woosh?
Die sich auch
sehr stark an Lucene 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 Volltext-Such
Features in den meisten Datenbanken.
Und das ist 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 zutraut,
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 da 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 komplett
das Feature-Set ist.
Postgres hat relativ viel
Volltext-Fähigkeiten.
SQLite
hat relativ viel. Das ist auch sehr, sehr
interessant.
SQL 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 anfängt, dann lässt man das eher
die Datenbank machen.
Dann macht man nicht,
fängt man nicht damit an, direkt irgendwie
den Elasticsearch daneben zu stellen.
Ab wann macht man das? An welcher Größe oder
welches Suchvolumen geht es da?
Das kann man so,
schwer beantworten.
Also weil meine Postgres jetzt auch
0,0x mehr die Antwort auf meine Frage geben kann.
Ja, genau.
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
Lucin
drauf springen, damit
es da noch einigermaßen performant
Ergebnisse rausbekommt.
Ähm, ne, das ist auch, also
die, die, ich würde
eher sowas sagen, wie es hängt halt von der Maschine
auch ab. Also wenn, sobald
das, 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 den Hauptspeicher passen,
dann hat man ein Problem.
Und das geht wahrscheinlich
dann mit Lucin 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, die man braucht,
für welche Dokumentengröße hast du da so Werte?
Ne, weiß ich nicht. Aber
keine Ahnung, kann sein,
also kommen wir halt auch drauf an, wie groß die
Dokumente sind. Aber
ich meine, heutige Daten 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 Dokumente hast.
Also
also
!
Was sind grundsätzliche Fragestellungen?
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?
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 das ist je nach Anwendungsfall
sehr unterschiedlich.
Okay, jetzt wird es interessant. Also ich möchte
suchen, auch ranken, ja, und das heißt die
Trefferquote 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
möglichst vielen Fällen halt irgendwie relevante Ergebnisse
haben.
Ja, okay. Und wie das funktioniert, ist natürlich
jetzt sehr spannend. Ja.
Also
wie, wie, wie, wie, wie, wie so ein Index
funktioniert, ist halt im Grunde, wenn ich mir
vorstelle, das wäre jetzt eine,
äh,
ich hätte jetzt eben dieses Buch mit dem Index
hinten drin und ich würde jetzt wissen
wollen, okay, ähm,
wo kommt denn das Wort, was könnte ich denn für ein Wort,
äh, was könnte ich denn für ein Wort, äh, was könnte ich denn für ein Wort, äh,
Keyword.
Keyword und, äh,
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,
äh, nehme halt, äh,
suche halt das Wort
Keyword, nehme die Seiten,
die Nummern, packe das
in ein Set und, äh,
nehme das, äh, nehme das gleiche
Set der Seiten von, äh,
Python. Und jetzt kann ich
da halt zwei Dinge machen. Ich könnte es entweder
schneiden, könnte sagen, irgendwie,
ich hätte gerne alle Seiten, in denen beides
vorkommt, oder sozusagen, also die Schnittmenge
der beiden Mengen
und, äh, oder ich könnte sagen, ja, ich nehme
die Vereinigung, also
entweder das ist, wo Python drin vorkommt
oder wo Keyword drin vorkommt, die Seiten hätte ich gerne
und kriege dann einfach alle.
Und das ist ja auch das, was man sozusagen in, ich glaube,
Google hat da eine Syntax für, äh, das
ist übrigens auch bei Postgres, kann man, ähm,
die Syntax, die Google verwendet,
äh, äh, äh,
TS2, äh, wie heißt das,
2Query, irgendwas, 2WebQuery, ach, ich weiß nicht,
wie die Postgres-Funktion heißt, die übergibt
man einfach diesen Query-String, den man bekommen hat
und dann macht die daraus eine Anfrage,
äh, nach der gleichen Logik, sodass man
halt auch und oder oder verwenden
kann, sozusagen.
Ähm, ja,
und, ähm,
äh,
genau, das ist eigentlich im Grunde
das, was halt die Suchmaschine macht. Das Problem ist jetzt
natürlich, äh, die, die, die
Seiten, wie auch immer man die jetzt bekommen hat, ob man,
äh, die Mengen vereinigt oder
geschnitten hat, äh,
äh,
man hat jetzt noch keine Reihenfolge der, der Seiten
irgendwie. Und die, die Frage wäre halt,
wie, wie berechnet man die aus und das,
was halt so, äh, von immer gemacht
wird und, äh, zählen,
äh, absolute Zahl sortieren,
höh. Kann man, kann man und könnte man auch machen,
ja, aber das, was halt, äh,
was halt schon, äh,
was normalerweise immer so für, für
Scoring, äh, Ranking verwendet wird, ist
halt TFIDF, das hatten wir, glaube ich, auch
schon ein paar Mal, ist halt einfach, äh,
der, die
Query wird halt in einen,
äh, ja,
TFIDF-Faktor verwandelt und, ähm,
sozusagen die,
äh,
Also außer Leute, die davon schon Ahnung haben,
hat das jetzt niemand verstanden, deswegen musst du noch mal
kurz erklären, was das denn überhaupt ist.
Äh, TFIDF ist Term Frequency
mal Inverse Document Frequency
und das legt sozusagen
Gewichte fest für die
Tokens, also die
Wörter aus deiner Query für Keyword
und für Python jetzt in unserem Beispielfall.
Ja.
Und, ähm,
ja, das ist halt,
ich weiß nicht genau, ob man genau erklären muss, wie das, wie das
ausgerechnet wird, äh,
äh, also Term Frequenz
wäre halt sozusagen auf dieses, äh,
Seitenbeispiel, äh, ü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. Dann weiß ich halt, wie viel Prozent
der Worte auf dieser Seite sind halt Python.
Mhm.
Das ist die Term Frequenz.
Und, ähm, äh, multipliziere
das mit der Inverse Document Frequency, das ist
halt sozusagen, in, in wie viel
äh,
Seiten kommt denn
dieses Wort überhaupt vor?
Mhm. Äh, ein Maß dafür und,
äh, je, äh,
weniger das vorkommt,
desto, äh, höher ist
die Inverse Document Frequency.
Mhm. Äh, und, äh,
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's 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 zum Beispiel für Sachen, die, äh,
also der, die, das, das kommt halt auf jeder Seite vor.
Ja, okay, Stopwatch. Daher ist es halt
einfach nicht so relevant, weil
Inverse Document Frequency davon wäre halt sehr, sehr
niedrig, weil, äh,
naja, es kommt halt überall vor, das heißt, äh,
ja. Ähm, jetzt multipliziere
ich diese beiden Teile, also einmal wie oft
kommt das, äh, Wort auf der Seite
vor mit, äh, 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, äh, überhaupt
nicht charakteristisch sind, weil sie überall vorkommen, also der, die,
das ist halt, äh, die kriegen halt sehr
niedrige Gewichte und, äh, 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, äh,
Seiten sozusagen und dann, äh,
multipliziert man das miteinander, also
die Kursinduzistanz. 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, 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 wo vor und wie, das wird,
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 sagst irgendwas über den Kursinduzistanz.
Ja, ja, genau. Wenn ich jetzt zwei Vektoren habe, dann
ist die Kursinduzistanz dazwischen einfach
nur der Winkel,
äh, also der Kursinduzistanz zwischen den beiden
Vektoren. Also jetzt nochmal kurz, also 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, genau, die Gewichte
sind jetzt sozusagen die Werte in dem Vektor
und, ähm, 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änge der Vektoren, 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
die halt sehr, sehr lang sind, würden halt viel
relevanter bei den vielen Suchabfragen sein, einfach weil
die halt auch viel mehr Sachen matchen.
Daher, äh,
normiert man das halt auf eine Einheitslänge,
sodass halt dann, wenn ein Dokument
sehr lang ist, kriegen die einzelnen Worte halt weniger
Gewicht.
Und, ähm, ja,
dann wird das halt vergleichbar.
Und, ähm,
äh, ja, also im Grunde ist das
eben relativ einfach.
Also diese TFE-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, äh,
das ist einfach nur
das Skalarprodukt der Vektoren.
Und das wiederum ist super einfach auszurechnen.
Also dieser Vektorraum, äh,
in dem diese Operationen stattfinden, äh,
wenn man jetzt sozusagen jedem Wort
eine Dimension zuordnet, äh,
Texte, also, wenn man jetzt
ein Dokument-Korpus 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 100.000,
also, und man
hat jetzt sozusagen für jedes Wort eine Dimension,
dann
klingt das irgendwie, äh, alles ganz schrecklich.
Wenn man sagt, ein 100.000-dimensionaler Vektorraum
ist ja irgendwie schwer vorzustellen und dann
daran irgendwie Winkel, uh, was soll denn das sein?
Aber eigentlich ist es
halt total, äh, total blöd.
Einfach, weil, äh, das Schöne daran ist,
oder das ist der Grund, warum man das macht, ist,
ein Skalarprodukt an der Stelle ist halt, wenn, wenn das so spars ist,
also die meisten Worte kommen ja in den meisten Texten
gar nicht vor. Das heißt, wenn ich, äh,
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 die miteinander,
wenn irgendwas multipliziert wird, wo eine Null drin ist,
dann ist es ja sofort auch wieder null. Das heißt,
ich muss mir... Könnt ihr das auch mal nachrechnen, bitte?
Ja, das heißt, die Rechenoperation ist halt,
ich gehe durch jedes, äh,
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,
äh, 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, äh,
jetzt muss ich nur noch ein paar andere statistische
Werte haben, um das halt wirklich ausrechnen zu können.
Und das ist halt, äh,
das ist halt eine total einfache Operation.
Also das ist halt...
Weißt du, welche anderen statistischen Werte du
jetzt noch haben möchtest zum eigentlichen Ranken?
Äh,
äh,
naja,
tatsächlich müsste man wahrscheinlich noch an jedem,
also die, die, die Dinge
im Index heißt dann Posting-Listen, dann müsste man
wahrscheinlich noch irgendwie den TF-EDF-Wert
tatsächlich, also ich, ich weiß es ehrlich gesagt nicht,
Lucine macht das,
weiß gar nicht, was Lucine da alles speichert, ich speichere noch ein paar andere Sachen,
ähm,
ich würde sagen, 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 das genau ist, weiß ich jetzt auch nicht mehr.
Also man kann das Ganze auch, äh,
leicht und naiv implementieren, äh,
in, in Python, man kann einfach für diese
Posting-Listen, das sind sozusagen die
Listen, äh, der Seiten, auf denen irgendwas
vorkommt, oder die IDs der Dokumente,
die packt man einfach an 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 Posting-Liste zu tun.
Posting-Liste,
so heißt das im Allgemeinen, aber in unserem Fall werden das
jetzt, wenn man jetzt sozusagen als Daten-Zu-File,
oder für Sets nehmen würde, Sets, und dann kannst du
halt hinterher, wenn eine Query kommt, äh, irgendwie
genau das machen, kannst halt irgendwie Schnittmenge
und Vereinigungsmenge bilden, je nachdem, ob du
deine Query mit End oder
Or verknüpfen willst, und,
ähm, ja, kriegst dann,
kriegst damit schon mal was raus,
und kannst halt auch, äh, äh, wenn du jetzt
die TF-IDF-Werte
noch mitgespeichert hast, kannst du auch einfach die Queries-Interessanz
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
Python. Also das ist, äh, das, das,
das geht relativ einfach, denke ich mal.
Äh, und, äh,
es ist auch mit, ich hab's 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,
äh, dass die halt sehr, sehr
viel Hauptspeicher verbrauchen.
Mhm. Äh, und überhaupt,
man muss natürlich alles, wenn man so ein
Python-Set hat, muss man zum Hauptspeicher halten, weil
ähm,
naja, äh, es ist halt eben keine Datenstruktur,
die irgendwie auf der Platte liegen kann, ja, während jetzt
ein Lucene-Index ist ein Ding, das eigentlich auf der Platte liegt,
und, ähm, das kann, also
das kann halt auch größer als Hauptspeicher werden, ist gar kein Problem.
Und, äh, das ist, äh,
so gebaut, dass, äh,
ähm,
ja, das maximal
performant ist, wenn Sachen
von der Platte auch gelesen werden und so,
und, äh, es ist, äh,
es ist, das sind schon einige schöne Tricks dabei.
Und, ähm,
aber tatsächlich, wenn man das jetzt einfach so
implementieren möchte, äh, kann man das mit
Sets durchaus mal machen. Was dann die, ähm,
großen Suchmaschinen
machen, und weswegen das Ding auch
Postinglist, äh, heißt, ist,
dass man das eben nicht in einem Set hält, sondern
in, äh,
in einer, in einer Liste,
die sortiert ist,
äh, sozusagen, wo die,
wo eben die Dokument-IDs oder jetzt, äh,
äh, 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.
Mhm. Weil die Differenzen zwischen
den IDs sind halt viel kleiner.
Und dann macht man etwas ganz
Fieses, das nennt sich Variable-Wide-Encoding.
Aha.
Schon wieder so ein Zauberwort, ja.
Äh, und,
äh, das, äh,
das bedeutet halt, dass du, äh,
diese, äh, normalerweise
in C oder so, wenn du
jetzt, äh,
äh,
ein Array hast, ja, dann,
müssen ja alle, äh, Werte in dem Array
den gleichen Typ haben.
Und das
macht man halt nicht so,
um Platz zu sparen, sondern man, äh,
deswegen hat, äh, man nimmt einfach,
äh, üblicherweise dann Characters,
also Byte-mäßige Dinge,
ich weiß gar nicht, also in C weiß ich jetzt, wie es geht, ich hab auch mal
sowas, äh, glücklich mal selber
implementiert, das, ja, ja.
Das war
fast Suchmaschine geschrieben, aus Versehen.
Aber, ähm,
äh, äh,
ich weiß gar nicht, wie man das in Java oder so macht, ich weiß
keine Ahnung, ähm, geht, geht bestimmt
auch irgendwie und, äh, 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 Charaktern
und wie viel,
äh, Bytes ich sozusagen
pro, ähm, oder wie viel Bit
ich pro, äh,
Eintrag in der Posting-Liste,
äh, verwende, das, äh,
das mach ich, das verwalte
ich selber, weil wenn die,
äh, die Abstände klein sind, dann kann ich
viel weniger Bits nehmen, als wenn die Abstände groß sind,
dann muss ich halt mehr Bits nehmen und
deswegen heißt das Ding auch Variable Byte Encoding,
weil, äh, die, ein Eintrag
in der Posting-Liste halt unterschiedlich viele Bytes
haben kann, je nachdem, wie groß der ist.
Mhm. Oder wie der Abstand ist zwischen
der vorherigen und der nächsten ID.
Und, äh, wenn ich jetzt sortierte Listen habe,
dann kann ich die sehr, sehr gut, da gibt's halt diverse
Algorithmen für, äh, kann ich sehr gut schneiden,
zum Beispiel solche Operationen wie, äh,
Schnittmenge davon bilden, das geht halt toll.
Äh, geht mit Sets auch, aber Sets,
können ja noch viel mehr und so,
äh, aber da brauch ich ja eigentlich
nur diese Schnittoperation, Vereinigung ist auch, äh,
total, äh, simpel und das geht
halt super, wenn ich so sortierte Listen habe.
Ähm, ja.
Und, äh, ähm,
genau, äh, das ist halt
auch, das ist relativ schnell, das ist vor allen Dingen auch
deswegen schnell, also
die Kompression an der Stelle, die ich dadurch
kriege, also ich krieg das auf ein Drittel des
ursprünglichen, also wenn ich das einfach nur als Integer speichern würde,
dann, äh, brauch ich,
ja, äh,
äh,
ähm, sagen wir mal, ich brauch einen Speicher 1,
ja, und wenn ich das irgendwie Variable,
äh, mit Variable Byte Encoding, äh,
kodiere, dann brauch ich halt nur noch 0,
Speicher 0,3, also das reduziert das halt
auf ein Drittel. Mhm, mhm. Und es ist
auch noch viel schneller. Und der Grund, warum es viel schneller ist,
ist halt einfach, dass der, das
Bottleneck ist halt, äh, irgendwie
das durch die CPU zu drücken,
also die Speicherbandbreite ist das Problem, du musst das halt
irgendwie, diese, 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, äh,
oder durch den Bus, weil, äh, ja,
und das in der CPU dann auszupacken
und, äh, miteinander, das ist ja alles kein
Problem mehr, äh, aber,
äh, 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, so viel
100, äh, oder so, so viel
Gigabyte pro Sekunde, die du da durchkriegst.
Und, ähm,
ja,
äh, genau, deswegen, deswegen macht man das so,
das macht das Ganze so ein bisschen kompliziert,
äh, aber
ja,
äh, und auch selbst, selbst so
von dem, von dem Volltextindex 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, das ist schon relativ,
äh,
ist halt nicht so eine total naive Implementation,
das ist auch ganz schön optimiert schon.
Ähm, ja,
äh,
Jetzt haben wir eine schnelle
Suchanfrage schon, aber ich hab immer noch
nicht genau verstanden, warum,
ähm, die Ergebnisse
jetzt besonders toll sein sollen. Es gibt bestimmt noch ganz viele andere.
Genau, TFR, die FS, so der Standard,
äh, das hat man ganz lange gemacht, jetzt, äh,
heutzutage auch nicht mehr, sondern
heutzutage nimmt man eher sowas wie,
äh, also es gibt halt zum Beispiel
Track-Konferenzen, äh,
Track, das hört sich nach, äh,
einer Raumschiff-Serie an.
Ja, äh, wird eher mit C
geschrieben und nicht mit K, aber, äh,
äh, da haben sich Leute halt Gedanken
darüber gemacht, wie evaluiert man eigentlich
Suchergebnis, äh,
äh, äh, Performance von, von,
von Suchmaschinen, da gibt's dann diverse Standard,
äh, Corpora
mit Dokumenten drin, wo man dann halt auch
Standard-Querys halt immer drauf abfeuert und dann guckt
halt, wie sind die Ergebnisse und so,
und, ähm, da hat sich irgendwann,
ich weiß gar nicht, wann das, äh,
also, so TF-IDF
hat man lange benutzt, aber dann
hat man festgestellt, so kleine
Multiplikationen, also die Formeln, es sieht immer
so ein bisschen ähnlich aus, aber man,
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, man 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, äh, nennt sich
BM25. BM25?
Ja, oder OKAPI,
äh, BM steht für
Best Match. Ja.
Ähm, und, äh, OKAPI.
Ja. Ja. Das ist,
das ist, glaube ich, ein Spektier.
Ja, ja, genau, genau, daher kommt das auch.
Oh, äh,
äh,
Entschuldigung.
Mhm, und, äh,
das ist, ist
nicht großartig anders, äh, als
TF-IDF sozusagen standardmäßig, so ein paar
Dinge sind halt noch dran, das war,
eigentlich sind da nur so ein paar magische
Konstanten und Faktoren drin,
äh, und, äh,
ja, das ist halt so ein bisschen
Fummelei, und, äh,
ist auch nicht offensichtlich, warum das jetzt genau dieser Art
besser funktioniert als die anderen, deswegen heißt es,
und genau deswegen ist es auch BM25,
ja, also man hat halt ganz viele Dinge ausprobiert,
und das, was dann halt über ganz viele
Data, äh, Datasets hinweg
und Queriesets gut, am besten funktioniert hat,
ist halt dieses Ding, nämlich nicht
BestMatch13 oder 47,
sondern BestMatch25 hat sich
herausgestellt, also das funktioniert in den meisten Fällen
irgendwie. Das ist doch eine tolle Zahl, übrigens, ja.
Ja. Äh, 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
in den, in diesen, ähm, auf dieser Konferenz
halt dann, ja, das Ergebnis
rausgefallen ist. Guckst du eigentlich Pika?
Ja.
Äh, die, die Serie?
Ja, ist das eine neue Star Trek-Serie? Ja,
tatsächlich hab ich jetzt auch mit angefangen, weil
ich dachte, so gut. Ich hab auch schon zwei Folgen geschafft.
Ja, es gibt jetzt fünf,
glaub ich, ne? Kann sein, ich hab keine Ahnung.
Ja, jetzt war jetzt ein
verregneter Sonntag, äh,
dieses, äh, da haben wir,
glaub ich, tatsächlich alle geschafft.
Cool. Ja, läuft grad 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 hat der Track-Faktor doch irgendwie
mit, äh, mitgezogen.
Der Flog in Flossbach, ne?
Ja.
Äh, jedenfalls, ähm,
äh, genau, genau.
Also das ist halt dabei rausgefallen, deswegen implementieren das alle.
Äh, das ist auch
immer irgendwie, das ist auch schon über zehn Jahre her
oder so, da dachte ich dann so, ah, da hab ich davon gelesen,
Best Met 25, voll gut, äh,
bringt auf jeden Fall noch ein bisschen was gegenüber
TFWF und so. Dazu kann man das nicht in
Hüsine einbauen, ha. Und dann hab ich
da so ein bisschen reingeguckt und dachte mir so, oh nein.
Hahaha, das geht nicht.
Ich muss so viele Klassen anfassen, das kann man
einfach völlig vergessen.
Und, ähm, war relativ
enttäuscht und hab mir damals schon gedacht,
Lysin! Dreck!
So ein Unsinn. Aber, äh,
mittlerweile haben das andere Leute dieses, äh,
haben das implementiert.
Die hatten mehr Lust da drauf, ja.
Mehr Ausdauer und jetzt ist es halt drin und es funktioniert
und, ähm, das ist auch das, was man, glaube ich,
automatisch irgendwie kriegt als Default.
Äh, ja.
Was war denn damals
bei den ersten Suchmaschinen? Also, äh, Alter Vista
zum Beispiel war ja so mit,
TFWF.
Ja, oder leichte Abwandlung davon, aber wesentlich anders.
Äh, das ist auch das, was, äh,
irgendwie so ein bisschen diese ersten
SEO-Geschichten, äh,
getrieben hat.
Also, wo Leute dann, also,
angefangen haben, alle möglichen Worte mit in
ihre, äh, Seiten zu packen.
Ja, für die sie gefunden werden wollen.
Ja. Weil das zielt natürlich
genau darauf ab, halt irgendwie den
TFWF, den TFWF-Wert,
hoch zu, und das funktioniert ja auch.
Also, wenn du es ganz naiv machst, kannst du damit
tatsächlich, äh, irgendwie dann für alles Mögliche
gut ranken.
Ja, es lässt sich halt sehr leicht gamen. Aber,
äh, ja,
ähm, funktioniert heute natürlich
alles nicht mehr so richtig toll und dann...
Wird du gestraft. Hö. Ja, ja, ja.
Ähm,
ja, das ist auch noch so ein Thema, SEO, ne?
Äh, aber,
äh, genau, also, diese,
aber daran sieht man schon, dass das mit der Relevanz
irgendwie nicht so einfach ist, dass die ganzen,
ähm, Suchmaschinen haben das auch nicht so richtig,
äh, hingekriegt. Und die
erste, die das halt so ein bisschen, die was fundamental
Besseres gemacht hat an der Stelle, die hat halt
alle anderen dann, äh,
äh, wie, wie sagt man das, aus dem Wasser
geblasen.
Äh, ja, hinter
sich gelassen und ist jetzt halt irgendwie
die Größte. Ich muss mir gerade
ein großes Niefährt vorstellen, das einmal in die Badewanne
hüpft. Ja, genau.
Ähm,
ja, weil eben
so ein einzelner Wert,
ist halt so, ist halt problematisch, ne?
Leute fangen an, dann drauf zu optimieren und dann ist
auch das die Frage, was für
Leute oder was, was für Fragen stellen
die Leute eigentlich und kann man das eigentlich
damit abbilden? Ist das, ist der Wert,
so ein TFEDF, so ein Kursinus Distanzwert,
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, äh,
dass ihr Problem oft nicht ist,
dass irgendwie, äh, ja,
äh, eine etwas bessere TFEDF-Formel
zu finden oder, äh,
irgendwie was Magisches, was irgendwie
anders die Relevanz gut macht, dann plötzlich
magisch, sondern dass, äh, 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 da drauf
und was kann ich tun, um das irgendwie
zu verbessern? 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.
Äh, zum Beispiel, aber ich meine,
es ist eigentlich, äh, ich, vielleicht kann ich einfach ein paar,
äh, Beispiele dafür nennen, warum das halt, äh,
äh, also TFEDF,
wenn ich jetzt, äh,
zum Beispiel Location-Informationen dabei habe, hilft mir halt
nicht so richtig viel. Also ich suche nach einem Restaurant-Namen
irgendwie, äh,
auf, auf, bei Google Maps oder so.
Dann hilft es mir nichts, wenn ich
jetzt TFEDF die nächsten
Namen irgendwie
kriege von allen Restaurants in Deutschland
oder weltweit, äh, sortiert.
Dann wird wahrscheinlich irgendwo ein Restaurant
in Kuala Lumpur vielleicht irgendwie am ähnlichsten
sein oder den besten Score haben, aber
hilft mir ja nichts, weil ich komme da ja gar nicht hin.
Das heißt, da muss irgendwie die Information,
wo ich bin und, äh,
wie nah das an mir dran ist, ja auch irgendwie mit
rein. Sonst, äh,
geht das bestimmt nicht so toll.
Ähm, oder halt,
wenn ich jetzt, äh,
ja, nehmen wir eben
eine E-Commerce-Seite habe,
äh, 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,
äh,
was die Leute relevant gefunden haben
zu einer Query. Also wenn jetzt eben man nach irgendwie,
keine Ahnung, äh,
ähm, samtbezogene Sessel
Amsterdam gesucht hat oder sowas
und dann hinterher irgendein Hotelversuch hat,
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,
äh, mitverwenden, um das, äh,
beim nächsten Mal, wenn jemand anders so eine
Anfrage stellt, äh, das zu verbessern.
Aber auch da hilft mir halt TF-IDF gar nicht.
Also, ähm,
ähm,
Geht es tatsächlich darum, dass die Informationen über diesen einen Menschen für alle anderen Menschen zu manipulieren?
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 so eine 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 gibt natürlich auch Ausnahmen, es kann auch sein, dass ich, keine Ahnung, ich nach, weiß ich nicht, Dörrautomaten suche
und dann aber so geflasht bin von dem, was hast du hier, einem Luftbefeuchter, den ich irgendwie sehe im Ergebnis,
obwohl er völlig irrelevant ist und dann darauf klicke und ihn sofort kaufe.
Direkt neben dem goldenen Schieberrad, vielleicht waren die auch zusammen in einem.
Aber so.
Also im Durchschnitt ist es wahrscheinlich so, wenn Leute was suchen und dann auf irgendwas aufklicken, das kaufen,
dann war das wahrscheinlich relevant.
Und die Informationen sozusagen, wie viele der Leute, oder 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 draufgeklickt.
Leute, die das gekauft haben, kauften auch.
Ja.
Ja, ist nicht so ganz das Gleiche, aber das kann ich auch zum Ranken benutzen.
Muss ich ja nicht.
Kann ich auch.
Nur mit TF-IDF hat das nichts zu tun.
Ich muss mir halt überlegen, wie ich das so kombiniert kriege, dass es da halt irgendwie auch zum Ranken mitverwendet 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?
Ja.
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.
Im gesamten Web kann ich irgendwas finden.
Also Google macht 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 jetzt 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 irgendeine Elasticsearch nehme, das in der Default-Konfiguration laufen lasse.
Und dann hoffe ich, 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 denn die Queries, wo kein Ergebnis kommt?
Ich finde das ja sowieso immer 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 doch mal irgendwo was zu essen bestellen und abholen oder so.
Okay, das war ganz gut.
Geh mal auf die Webseite, um zu gucken, hat der Laden denn jetzt auf oder nicht?
Immer wieder.
Ganz viele Läden kriegen das irgendwie nicht hin, 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, irgendwo in tiefer Struktur.
Und dann kommt man ja auf die Idee, 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 wahrscheinlich viele Benutzer besser zufriedenstellen kann.
Und das wird irgendwie überraschend selten, wenn solche Sachen gemacht werden.
Und man kann natürlich auch noch dann schummeln.
Und dann sagen, okay, wenn...
Wenn Öffnungszeiten eingegeben wird, zeigt immer als erstes die Öffnungszeiten an und nicht die Ergebnisse, die Suche zurückkommt.
Genau.
Also das ist halt so ein bisschen wie...
Wenn man sich vorstellt, man hat eine Firma und die hat irgendwie so eine Support...
Oder ein Helpdesk 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 Akten...
Dann schrankt hinter dir und guckst, was dabei rauskommt.
Das wird halt nicht gut funktionieren.
Insofern, also die...
Oft ist es...
Man hat so immer so Power-Law-Verteilungen.
Eine Power-Law?
Ja, Power-Law.
Also Potenzmengen-Verteilungen.
Ich weiß gar nicht, wie das deutsche Wort dafür ist.
Dass du...
Das hat man bei ganz vielen Sachen.
Dass halt 20% der...
Sozusagen Such...
Also 20% der...
Also bei Suchmaschinen wäre das wahrscheinlich.
Ich hoffe mal, ich sehe keinen allzu offensichtlichen Unsinn.
Aber das heißt, 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 Queries nur einmal und dann nie wieder.
Und da sind...
Manchmal ist der Tail halt länger und manchmal ist der Tail auch dicker.
Aber oft ist es so, dass eine kleine Anzahl von Queries macht halt schon einen großen Teil der Anfragen, die überhaupt gestellt werden, aus.
Und wenn das...
Wenn das halt 100 Stück sind, dann kann man die sich halt alle mal angucken und sich überlegen,
okay, was könnte man den Usern, die dauernd diese Anfragen stellen, denn 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...
Suchmaschine.
Software, die Volltextsuche macht, sondern wie gehe ich mit diesen Problemen 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 es nicht kaputt geht beim nächsten Release.
Und ich muss es testen.
Und all diese ätzenden Softwareentwicklungs-Past 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 würdest dann vielleicht einen Junko bauen oder so und dann...
Zum Beispiel, ja.
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 dann eine Antwort zugeordnet ist.
Und wenn das kommt, dann wird die direkt ausgespuckt und ansonsten wird dann die Suchmaschine bedient oder sowas.
Ja.
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...
Also vielleicht ist es sogar ein Modell, das irgendwas rankt.
Aber gut, habe ich jetzt auch noch ein...
Aber halt irgendwas, 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-IDF.
Aber mit TF-IDF anzufangen, das ist eigentlich ein...
Ja.
Ja, okay, keine gute Idee.
Also du hast gesagt, okay, TF-IDF, das ist das Standard, was zum Beispiel ein Elasticsearch oder ein Zola als Standard machen.
Weil das das Beziehen drunter ist, was das irgendwie auch kann.
Obwohl das dieses BM25 macht.
BM25 ist eigentlich sozusagen das, was dann wahrscheinlich verwendet wird meistens.
Das ist dann schon besser, aber...
Aber die Unterschiede sind nicht so groß.
Also natürlich macht das in gewisser Weise einen großen Unterschied.
Wenn man jetzt viele Suchanfragen hat und die Seite, wofür Umsatz ist und dann die Ergebnisse ein Prozent besser werden, dann ist das ja schon mal super.
Ja.
Ohne Ohm schicting 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.
Ohm schicting.
Da kann man ganz, ganz viele tolle Informationen eigentlich sammeln und verwenden.
Da kann man 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 besser bastelt.
Interessant, ja.
Ja, ja.
Das ist ja auch 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 der Rolle des Dokuments, das gefunden werden möchte, sozusagen.
Also wenn man eine Webseite hat, die halt über Google zum Beispiel gefunden werden will oder so,
dann hat man dieses SEO-Problem.
Da gibt es ja auch 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, 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 gerankt.
Und das funktioniert zwei Monate, dann kommt der nächste Patch und dann ist man down.
Dann werden alle gelöscht, alle Ergebnisse, die man vorher hatte.
Also ich habe gehört, Content ist King.
Ja, also Google versucht, also zumindest das Team versucht immer auf den besten Content zu optimieren.
Die schmeißen alle Sachen drauf, die sich 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-IDF-Sachen vielleicht dann auch irgendwie klarkommt.
Aber der dann durch die, also vielleicht haben die einen Qualitäts-Ranker,
der sich irgendwie durch irgendwelche Daten ergibt und den sie dann damit bauen.
Ja, was sie halt machen.
Also Internetsuche ist ja sowieso nochmal was anderes als Volltextsuche,
weil man ja da noch andere Dinge mit einbezieht.
Also die Links-Struktur, wie was, also früher war es ja 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 total super Ergebnissen,
sondern Google sind halt die Ersten, die mehr Informationen reingenommen haben.
Und ich würde sagen, natürlich, das ist absolut ganz normal, 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 PageRank eingeführt.
Sondern sie haben einen PageRank, genau.
Was ist denn der PageRank?
Das hat gar nichts mit Seiten zu tun.
Ja, genau, genau.
Das heißt, könnte man denken, das ist das mit dem,
so wurde es wahrscheinlich.
Das wurde wahrscheinlich auch oft interpretiert.
Mit dem PageRank.
Mit dem Rank, der Page zu tun hat, den man halt so hat.
Und es gab auch so irgendwie Browser-Plugins,
die einem den eigenen PageRank auf der Seite angezeigt haben und so.
Aber nein, das Wort kommt tatsächlich von Larry Page,
also einem 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.
Du hast gerade noch zwei Sachen gesagt.
Einmal dieses Power-Dings, das habe ich jetzt schon wieder vergessen,
wie es hieß, und gerade Eigenwerte berechnen aus Matrizen mit PageRank.
Vielleicht erzähl mir das nochmal als einzelne kleine Subkapitel.
Ja, ich weiß gar nicht, ob es so relevant ist.
Ich glaube, man kann das auch, wenn man das in 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 man kann den Link grafen,
das Web, also das Web.
Das Web ist im Grunde ein Graph.
Eine verknüpfte Knotenpunkte, die durch Linien wieder einer verknüpft sind.
Die Linien sind links.
Ja, die Graph-Mathematik-Refinitionen sind länger aus Knoten und Kanten
und irgendwie, keine Ahnung, es gibt gerichtete,
und das Web ist ein gerichteter Graph.
Also ich kann halt auf eine Seite linken
und die linken nicht auf mich zurück.
Und ja, es gibt jetzt,
das Ding hat bestimmte Eigenschaften,
die es halt besonders machen.
Also zum Beispiel der Link-Graph des Webs ist halt super spars.
Das ist halt, die meisten Seiten haben nur Verbindungen zu ganz,
ganz wenigen anderen.
Ja, aber, also es gibt ja auch Graphen,
wo alle miteinander irgendwie verbunden sind.
Das ist beim Web nicht so.
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 1 ein
in der entsprechenden Zeile und Spalte.
Also wenn ich jetzt von X nach Y...
Also in der Zeit kommt dann eine 1,
wenn ich von meiner Seite auf deiner Seite link höre,
das steht.
Da 1.
Genau.
Ja, und das kann ich für das gesamte Web machen
und das in eine Matrix packen.
Was natürlich ein bisschen schwierig ist.
Auch da kann ich halt nutzen,
dass das Ding spars ist
und dass die allermeisten Werte 0 sind.
Und die, die 0 sind,
die schreibe ich halt einfach nur irgendwo hin.
Und da kann ich mir ganz sparen,
die irgendwo muss ich 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 PageRank 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.
Ja.
Oder gibt es einen Startpunkt?
Ja, laufe ich da drüber.
Ja, genau.
Also...
Laufe ich über diese Seite, ja genau.
Also gibt es einen Startpunkt?
Nö, das fängt halt irgendwo an.
Klickt sich einfach irgendwo durch.
Ja, random, ja.
Ja, okay.
Wikipedia-Artikel 1, 2, 3, 4, 5,
dann Querverweis auf irgendeine Quelle,
die bei einem Nachrichtenportal,
das sind auch irgendeine...
Ja.
Und was das Ding im Grunde,
sozusagen abbildet,
ist,
wie wichtig,
wie zentral,
ist eigentlich eine Seite.
Und...
Also wie tief in diesen Knoten,
wenn man sich das Web jetzt doch wieder
als Knoten vorstellt oder sowas,
und dann der zentrale Knoten,
welche Seite ist das?
Ist das wahrscheinlich mittlerweile Google?
Ich weiß es nicht.
Gibt es da,
weißt du das?
Gibt es das?
Naja, keine Ahnung.
Mit dem größten Page-Rank
müsste dann ja eigentlich
Google selbst,
selber sein.
Ja, Wikipedia ist immer weiter oben,
aber Google,
nee, glaube ich gar nicht mal.
Google,
die Links,
die Google ausgibt,
sind auch nicht,
genau,
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-EDF
aufgeschickt,
dann ist das halt viel besser,
als wenn ich das nur
wenn ich nur TF-EDF 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-EDF mit irgendwie
so einer eher globalen Geschichte.
Und das funktioniert dann schon ganz gut.
Und das führt halt dazu,
dass ich eben solche simplen,
ich schreibe jetzt fünfmal
ein Keyword auf eine Seite,
Spiele reinhalten,
dann nicht mehr funktionieren.
Weil dadurch werde ich halt nicht
zentral im Graph,
dass ich das tue.
Und aber auf der anderen Seite,
das ist 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ächen
und das ist ein Katz-und-Maus-Spiel
und keine Ahnung.
Aber Google verwendet jetzt
auch nicht nur PageRank
und irgendwie sowas TF-EDF-artiges
oder so,
sondern die verwenden halt
ganz, ganz viele.
Ich habe es gerade mal auch gemacht.
Der PageRank gibt es jetzt irgendwie
neun und zehn.
Also das ist irgendwie
nummerlich gestellt.
Und PageRank 10 ist tatsächlich
Google.com
und The Government of India,
India GovN.
Aha.
CNN.
Und ja,
was hast du,
wie drei Kontos hast du?
Und dann gibt PageRank 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,
also nehmen wir an,
würdest jetzt nur TF-EDF
und den PageRank haben,
dann hättest du zwei,
oder die sind,
im Suchmaschinenbereich
nennt man das mal Signale,
im Machine Learning Bereich
würde man das Features nennen,
sondern Google
sammelt eher so hundert,
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 Query gestellt hat,
ein paar kommen aus dem Dokument,
eben wie sowas wie PageRank
oder
so.
Ähm,
kommt die Query irgendwie
in der Domain vor
oder sowas.
Äh,
ein paar kommen aus einer Kombination
von Query
und Dokument.
TF-EDF wäre so ein Fall,
ne,
da multipliziert man das ja miteinander.
Und jetzt hat man halt
sozusagen für jedes Suchergebnis
äh,
so ein Vektor
mit irgendwie
vielleicht 100 Einträgen
oder 200
oder 500
oder so.
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 getunt haben.
Es kommt aufs,
das gleiche raus,
letztlich,
ähm,
dass diese Vektoren halt
in Reihenfolge bringt
und irgendwie halt ein,
ein endgültigen Score halt
ausgerechnet.
Ja.
Äh,
im simpelsten Fall könnte das
einfach eine gewichtete Summe
sein zum Beispiel.
Mhm.
Äh,
du sagst halt,
wie wichtig ist mir
jedes einzelne Feature,
dann machst du halt
die Summe drüber
und,
äh,
normierst das vielleicht
noch irgendwie oder so.
Und, ähm,
dann sortierst du halt
nach der,
äh,
nach der Summe.
Äh,
könnte man machen.
Oder man kann's halt
dieses Modell halt auch
irgendwie trainieren.
Äh,
und, ähm,
ja,
kriegst dann halt irgendwie
am Schluss, äh,
eine Sortierreihenfolge.
Und, äh,
ja,
das ist halt eher so
das, was heute gemacht wird.
Äh,
das ist lustigerweise
aber in den ganzen,
also zumindest,
ich weiß nicht,
ob es kommerzielle Suchmaschinen
gibt,
die das implementen,
die sowas ähnliches machen.
Die ganzen, ähm,
Open Source Suchmaschinen
können das nicht.
Mhm.
Nicht so,
also so ein bisschen.
Also man kann so ein bisschen
was machen,
aber so richtig.
Ein bisschen woosh,
aber so richtig.
Aber so richtig toll
können die das,
also so cool wie irgendwie
die großen dazu machen,
machen die das eigentlich nicht.
Das ist auch so etwas.
mich, mich,
mich ärgert ja so ein bisschen
oder mich wundert,
dass es da so wenig,
also es ist viele Dinge,
die halt so im
Bereich Websuche oder so
halt, äh,
irgendwie
schon lange gemacht werden,
äh,
oder da, äh,
das kommt halt nie
so richtig an.
Also was mich zum Beispiel
wundert ist,
äh,
was Google seit 2004,
glaube ich,
macht oder so,
die halten ihre NTCs
alle nur noch im Hauptspeicher.
Die gehen gar nicht mehr
auf die Platte,
weil Platte ist immer
so ein bisschen blöd,
weil, äh,
du kriegst halt Latenzen,
werden halt unvorhersehbar.
Mhm.
Äh,
plötzlich, äh,
liegen halt deine Sektoren
ungünstig, äh,
irgendwie du musst warten,
bis das da vorbeikommt
und du musst aber viele Sachen
miteinander, äh,
mergen und jetzt
liegen die Kombinationen
von,
es ist halt,
die Sektoren sind halt
ungünstig korreliert
und plötzlich musst du halt
auf eine Querie
sehr lange warten.
Das ist eigentlich
totaler Mist.
Du willst eigentlich
relativ sicher sein können,
dass es halt nach so und so viel,
äh,
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,
äh,
die möchten halt wissen,
okay,
wenn jemand eine Suchanfrage
eingegeben hat
und, äh,
dann das an die,
an diese tausend, äh,
Server,
die halt jeweils nur
einen Teil vom Index haben,
schicken und dann kommt
ein Ergebnis zurück,
dann wissen wir halt,
nach 20 Millisekunden
ist das halt durch.
Wenn da Platten im Spiel wären,
könnte man das überhaupt
nicht mehr garantieren,
weil, äh,
ja,
da hast du halt Pech
und irgendwo musst du halt
auf eine Platte warten,
äh,
und die Seek Time da ist halt,
äh,
bei Platten auch,
sind halt mal 10 Millisekunden
oder noch mehr,
äh,
und dann wird das Gesamtergebnis
halt langsam dadurch,
das ist halt irgendwie Kacke.
Aber jetzt,
wenn man sowas wie Lucene hat
oder irgendwie 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 Queries,
sondern halt irgendeine,
was halt, äh,
naja,
aber das ist halt so designt.
Also,
es kann auch sein,
dass man mittlerweile sagen kann,
okay,
nur, äh,
dieser Index soll in Memory liegen
oder so,
aber ich weiß es nicht so genau.
In dem Fall mich wundert,
dass das halt,
weil bei den Hauptspeichergrößen
heutzutage sollte das
auch überhaupt kein Problem sein,
dass man halt
den Index, äh,
halt im Hauptspeicher hält,
ne,
und wenn das nicht reicht,
dann vielleicht mal mehr Maschinen dazu,
ist auch,
warum,
warum muss das auf,
äh,
wie legt man das auf die Platte,
äh,
optimiert sein?
Das macht auch heutzutage
eigentlich keinen großen Sinn mehr.
Oh,
da hab ich noch was vergessen,
äh,
bei den,
äh,
es gibt ein Ding,
Redis,
äh,
das hatten wir jetzt auch schon ein paar Mal,
das kann auch Fulltext,
äh,
Volltextsuche mittlerweile ganz gut.
Mhm.
Also Redis ist ein,
äh,
Cache,
ein,
für bestimmte Dinge,
die als Key-Value kombiniert sind.
Ja,
Key-Value ist aber nicht nur das,
es kann auch ein paar andere Datenstrukturen
und,
ähm,
das liegt tatsächlich nur im Hauptspeicher
und das kann auch Volltextsuche
und das wollte ich mir auch schon immer mal angucken,
aber hab ich es,
äh,
letzter Zeit nicht geschafft,
äh,
kann sein,
dass das mittlerweile vielleicht ein bisschen sogar das erfüllt,
was ich irgendwie gerne hätte.
Ähm,
ja,
äh,
aber,
äh,
Lucid ist halt,
äh,
tatsächlich eher so drauf optimiert,
dass es auf der Platte gut aussieht.
Und,
ähm,
ja,
hm,
also da,
da hängt das irgendwie so ein bisschen hinterher
und es hängt halt auch hinterher bei solchen Sachen wie,
äh,
ähm,
also im Machine Learning Bereich läuft dieses ganze Thema immer,
äh,
unter dem Namen Learning to Rank.
Mhm.
Also sozusagen,
dass du halt,
machst halt Features,
äh,
und,
äh,
du hast halt jetzt,
die Training,
deine Trainingsdaten sehen immer so aus,
dass du,
äh,
Mengen hast von Queries
und dann
Ergebnislisten,
wo halt Leute,
also,
redaktionell annotiert ist,
wie gut waren,
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,
äh,
zu 3,
äh,
oder 4 oder 6,
ist halt super relevant für diese Anfrage,
äh,
ähm,
äh,
Ergebnislisten annotiert haben
und du dann halt hinterher,
äh,
sozusagen,
testen kannst,
wenn du jetzt
was an deiner Suchmaschine geändert hast
und
fütterst die halt mit den Queries
und guckst dir,
äh,
die Resultlisten an,
dann kannst du halt
einen Score ausrechnen.
Da gibt's dann unterschiedliche Master,
die man benutzen kann,
äh,
ja,
Mean Average Precision,
Normalized,
Cumulative Discounted Gain,
äh,
Expected Reciprocal Rank
oder was auch immer,
äh,
Ich wundere dich jetzt dabei,
mal kurz,
wie alle drei,
äh,
ja,
Aber im Grunde sind das alles Master dafür,
wie gut,
äh,
ist jetzt sozusagen die,
äh,
dieses,
diese,
äh,
dieses,
äh,
Ergebnis für die Anfrage
und,
ähm,
ja,
wenn,
wenn ich halt über viele schaffe,
besser zu sein als ein anderes,
äh,
Verfahren,
dann,
äh,
denke ich halt besser.
Dann,
dann hab ich halt ein besseres Ergebnis
und das ist ja etwas,
was sich dann auch direkt,
äh,
bemerkbar macht in User-Zufriedenheit
oder Geld oder was auch immer man halt
aus mir möchte.
Ähm,
ähm,
und,
ähm,
naja,
äh,
ähm,
äh,
genau,
äh,
den,
normalerweise,
wenn ich jetzt so ein,
also,
Maschinen-Learning-Modelle funktionieren da wirklich besser.
Also,
das,
es gibt da schon,
äh,
es gab da schon,
gibt da schon lange auch Wettbewerbe.
Ich glaube,
ich hab mal in einer Learning-for-Rank-Challenge mitgemacht,
das war 2009 oder so,
äh,
und,
wenn man das vergleicht,
also,
was,
das ist schon über 10 Jahre her,
das ist schon klar.
Ja,
das ist krass,
ne?
Und es ist immer,
aber was ich dann,
ich dachte eigentlich,
wenn man mich damals gefragt hätte,
ähm,
was glaubst du,
wann können Suchmaschinen,
ist das so ein Standard-Feature von,
von,
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,
ja,
also,
das ist jetzt,
also,
das ist so ein bisschen,
hm,
naja,
aber wahrscheinlich braucht man ja da doch irgendwie auch einen Markt dafür,
und irgendwie,
äh,
und wenn es einfach keinen interessiert,
dann,
äh,
passiert das halt auch nicht,
und wenn es keinen Grund gibt,
das zu implementieren,
na,
und den gibt es halt nur bei den großen Suchmaschinen,
und die machen das wahrscheinlich,
aber,
äh,
die geben ihren Kram halt nicht raus.
Ach ja,
aber,
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,
äh,
TF-IDF-Vergleich mit einem einfachen Machine Learning-Modell,
wo man halt ein paar,
äh,
Signale nimmt und die kombiniert,
und das halt dann optimiert hat,
das ist halt schon wirklich deutlich besser,
und,
ähm,
das heißt,
man kann ja relativ viel rausholen,
äh,
was die Qualität von Suchergebnissen angeht,
und das wäre eigentlich alles gar nicht so schlimm.
Na,
na ja,
ähm,
ja,
also,
falls du eine neue Suchmaschine brauchst,
dann sag dir einfach mal Bescheid.
Ja,
das ist halt dummerweise auch irgendwie nicht so ganz so super,
äh,
leistungsvoll mit Tiana,
das kann man auch nicht so an einem Wochenende machen.
Na ja,
aber,
ähm,
also,
ich glaube,
wenn man jetzt,
äh,
beispielsweise Postgres nimmt oder so,
und,
äh,
halt,
irgendwie,
Django,
und dann,
äh,
Volltextsuche drauf macht,
und dann halt,
kann man natürlich auch die eingebaute Rank-Funktion nehmen,
die halt auch was TF-IDF-Methods macht.
Und,
und Redis dazu.
Äh,
ja,
Redis,
äh,
oder man kann auch mal Redis ausprobieren,
muss ich mal,
muss ich mal testen.
Äh,
dann ist man da schon,
wenn man jetzt was,
wenn man das nochmal selber sortiert,
äh,
schon relativ weit vorne,
wenn man das dann richtig macht,
ja.
Genau.
Ja,
ich glaube,
du hast eine Sache,
irgendwas mit dem PAU,
irgendwas gesagt,
da hat,
du wolltest nur kurz drauf eingehen,
ich weiß jetzt nicht,
ob das noch wichtig ist,
ob das,
oder jeder schon vergessen hat.
Ähm,
PAU,
irgendeine Methode,
zum Ranken,
ähm,
was ist,
äh,
die exponentielle,
der,
du meinst die Potenzmenge,
also,
du meinst,
äh,
ja,
äh,
ich glaube,
das hat,
also,
das halt,
äh,
ja,
also,
kommt drauf an,
ist halt unterschiedlich für jede,
ähm,
Seite,
oder für jede Suchmaschine,
hängt halt von,
ab welcher Anfragenstelle,
aber was man oft sieht,
ist halt,
dass eine kleine Anzahl von Anfragen,
kleine Menge von Anfragen,
Großteil,
also,
eine kleine Anzahl unterschiedlicher Anfragen,
macht dann Großteil,
Entschuldigung,
das hattest du doch tatsächlich schon einigermaßen erwähnt,
ja.
Das ist das,
äh,
genau,
das Problem hat man auch.
Ja,
ansonsten,
ich weiß nicht,
äh,
was,
äh,
oder genau,
wir hatten ja so SEO schon so ein bisschen,
aber,
äh,
da,
da würde ich auch noch gerne,
also,
was man halt da,
äh,
du sagst Content,
das klingt ja aber,
genau,
die,
das,
was sich Leute oft nicht,
äh,
klar machen,
ist halt,
ähm,
was,
was das heißt,
würdest du sagen,
jetzt geht darum,
ähm,
die optimale,
den optimalen Text zu schreiben für irgendeine,
ich glaube es,
ähm,
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,
dass man Absätze hat,
die tatsächlich mit Inhalten gefüllt sind,
die halt eine Wortdiversität,
äh,
beinhalten,
die zu dem Thema einigermaßen passt,
ja,
dass halt,
dass die Worte da,
irgendwie schon einen Kontextbezug zu haben,
dass die 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 Post,
dann wird das 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,
ne,
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 taktisch sinnvolle Sätze,
zu einem Thema hinschreibt,
die dann auch so aussehen,
als gehören die zum Thema,
weil die halt da mit dem,
ne,
TF,
RDF,
hätte 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,
ja,
Content-Pyramide,
wie man das so sagt,
aufzubauen,
das heißt,
zu einem Oberthema,
viele verschiedene Bereiche,
die eigentlich zu dem 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,
das aber alles Python ist,
und das hat irgendwie alles einen Bezug zu Python,
dann,
kommen wir tatsächlich in dieser Content-Pyramide Python,
immer wieder ein Stück weiter oben,
nach oben,
natürlich haben wir jetzt keine Texte,
die man so analysieren kann,
per Volltextsuche,
und nachdem man,
und winken kann,
und wir haben halt nur irgendwelche Snippets,
oder Sonos,
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,
sehr auf der,
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 ü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 das zum Beispiel,
gut sein,
ich,
das ist auch etwas,
das kennen bestimmt viele Leute,
wenn man,
man sucht nach irgendwas,
dann ist,
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,
was wollen die mir jetzt wieder anbieten,
fünf Stockfotos,
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,
was,
ja,
das hat man,
hat man oft,
aber die Frage ist,
warum müssen die eigentlich,
allen die gleiche Landingpage zeigen,
das müssen die doch gar nicht,
ja,
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 sie sich überlegen müssten,
ist halt,
okay,
wenn jetzt jemand,
nach bestimmten technischen,
Geschichten sucht,
dann,
geben wir dem,
doch,
ja,
geben wir dem vielleicht,
doch eine Seite,
wo tatsächlich steht,
was wir machen,
und wenn jetzt,
irgendwie,
keine Ahnung,
eher ein Business orientierter,
User halt,
nach den,
nach den üblichen Buzzwords sucht,
oder so,
den gut,
dem kannst du ja dann vielleicht,
irgendwie,
vielleicht kriegst du den,
irgendwie,
mit Stockfotos glücklich gemacht.
Ich weiß auch nicht,
warum,
aber,
das führt ü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 den tollen Content teilt,
sondern,
dass man den dann,
also,
wenn wir jetzt von der ganzen Geldmaschine ausgehen,
den dazu bringt,
dass er irgendwas kaufen soll.
Wenn der schöne Kapitalismus halt so ist,
der möchte dich emotionalisieren,
und dir jetzt darfst zeigen,
was du willst.
Ja,
weil ich kann,
ich weiß nicht,
aber ich meine jetzt,
um rein aus dem Suchmaschinen-Kontext,
äh,
was man jetzt damit macht,
ist ja nochmal eine andere Frage.
Klar,
will ich eventuell Leute hinterher,
äh,
will ich da irgendwie,
die konvertieren zu was auch immer,
Umsatz, äh.
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 Pythonistas.
Genau,
man muss sich halt überlegen,
was man für Ziele eigentlich erreichen will,
aber,
äh,
damit das überhaupt funktionieren kann,
damit ich überhaupt die Chance kriege,
äh,
muss ich ja irgendwie,
vielleicht,
oder macht es vielleicht in 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,
ähm,
dass es halt dann so ein,
eben,
technisches Ding ist,
welche Farbe,
äh,
nehme ich da,
oder welche Fotos,
wie ist der Anteil von Fotos zu Text,
dass das dann irgendwie gut macht,
aber das,
wenn da nicht steht,
äh,
was mich interessiert,
dann kriege ich das nicht wieder gut gemacht,
durch irgendeine Farbe,
das ist einfach,
das,
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ä-invertisiert,
und gefiltert ist,
dass deine eigene Blase so gut zu dir passt,
dass du da genau das findest,
was du machst.
Das ist,
nein,
es müsste sich jemand Gedanken drüber gemacht haben,
das ist halt das Entscheidende,
jemand muss sich,
zum Beispiel,
angeguckt haben,
Also bessere Kuratierung durch den Suchalgorithmus.
Nee.
Jemand sollte sich überlegt haben,
zum Beispiel,
wir sind das Dokument nicht,
wir sind die Suchmaschine,
was Google macht,
ist nochmal ein anderes Ding,
aber,
ne,
es 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.
Das ist ü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 einer 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,
also,
aber das ist halt sehr schwer zu vermitteln,
aber wenn du jetzt zum SEO gehst,
der so die Content-Strategie macht,
oder so,
dann sagt er dir vielleicht einfach,
boah,
kann das auch anders machen,
aber wenn du jetzt zum,
zu einer technischen SEO-Agentur gehst,
die dir sagt,
okay,
ich verkaufe dir so und so viel Backlinks,
dann hilft dir das,
also,
sagen wir mal 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 hinweise,
üblicherweise mitbekomme,
immer sehr vernachlässigt,
vernachlässigt,
also,
die Leute kümmern sich immer um technische Details,
sondern oft auch um Sachen,
die eigentlich,
ja,
fragwürdig sind,
und,
lassen halt eine ganze Menge gute Gelegenheiten einfach so liegen,
ja,
aber,
es klingt halt,
als wäre es auch,
wenn nicht,
das zu implementieren,
ja,
ist es,
ist es tatsächlich,
also,
das ist halt auch,
das ist vielleicht auch der Grund,
warum das keiner macht,
ja,
genau,
und was die Leute,
die das halt implementieren,
auch so,
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 ist,
ja,
aber die großen Kunden,
hast du das 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,
nicht,
das ändert sich nach Suchanfrage,
sondern,
du hast halt unterschiedliche Pages im Google Index,
und bei unterschiedlichen Anfragen,
werden unterschiedliche Seiten gefunden,
ja,
okay,
das kannst du machen,
das ist gar kein Problem,
ja,
das habe ich,
ja,
okay,
das ist natürlich,
ja,
also,
man hittet quasi für jedes schöne Keyword-Kombination,
seine eigene Ländepage raus,
ja,
oder,
du musst nicht für jede Kombination,
aber,
du musst halt gucken,
also,
man würde damit anfangen zu gucken,
was suchen die Leute eigentlich,
welche,
mit welchen Anfragen landen sie,
oder,
auch,
wenn ich jetzt mich dafür interessiere,
was würde ich denn suchen,
und wie schaffe ich es dann,
dass ich dann auch,
dann da gerankt werde,
und,
dieser,
dieser Schritt,
das ist ja das aller,
aller simpelste,
dass man halt anfängt,
sich zu überlegen,
okay,
wie kommen Leute eigentlich hin,
das machen die meistens 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 denn jetzt hochgerankt,
und dann packen sie da irgendwie komische Warte rein,
oder,
kaufen Links,
oder,
machen irgendwie seltsame Dinge,
ändern die Farben,
äh,
verstecken weißen Text auf weißem Hintergrund,
ja,
oder kaufen Hellhits bei Google,
oder so,
und wundern sich dann,
dass die Leute irgendwie,
wenn sie halt quasi da landen,
dann irgendwie enttäuscht sind,
also,
ja,
aber diese ganzen Tricks,
also mit den Sachen verstecken,
hinter weißem Hintergrund,
und mit den extra Keywords,
und mit den zu vielen Links,
das hat,
glaube ich,
Google mit den ganzen neuen Pads,
ja,
die sind da sehr gut,
also,
das wird alles nicht so richtig,
äh,
richtig funktionieren,
ja,
es wird sogar bestraft,
also,
du wirst tatsächlich abgerankt,
wenn du sowas machst,
also,
wenn die solche Methoden finden,
die können die identifizieren,
dann schmeißt du dich für raus,
das wird bestraft.
Würde ich jetzt,
finde ich,
weil,
ich wüsste jetzt nicht genau,
warum man das machen sollte,
weil im Grunde ist es ja,
ich würde,
wenn ich Google wäre,
das ignorieren,
weil,
nö,
also,
ich habe gehört,
dass das tatsächlich drinsteht,
ich weiß nicht,
was das für Google bedeutet,
oder was,
ja,
das ist halt nur noch Sachen gerankt,
wenn die halt diesen Content-Qualitätsding
besser machen können,
das heißt,
weil die halt auf diese Qualitätssachen
und Leute,
die halt dann versuchen,
mit Keywords das einzubinden,
die legen nicht so viel Wert
und 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 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-Auswahlkompetenz
und greift da halt ins Klo,
dann 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,
aber ich weiß es nicht.
Aber ich glaube,
Google hat das tatsächlich gemacht,
das steht irgendwie in den Rules da drin,
aber ja,
sollte man vielleicht nochmal drüber nachdenken
und das ist sowieso,
also ja,
ja gut,
aber ich hoffe jetzt,
also Rest muss bewerten,
aber das haben wir,
glaube ich,
heute nicht mehr die Zeit für
und das ist auch nicht unser Thema.
Ja.
Warum,
wieso,
weshalb dann,
welche Sternchen vergeben werden sollen,
sollten,
nicht sollten,
oder?
Ja,
aber genau,
zum Beispiel,
haben wir noch irgendwie ein großes Thema
oder sowas 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 Wertserechnungen,
aber das ist,
vielleicht auch einfach hier an der Stelle too much.
Wir haben vielleicht noch wieder mal,
leider ein bisschen wenig erzählt,
wie man das in Python macht.
Also,
aus der gesagt haben,
dass es irgendwie so Pylusin und Woosh gibt,
habe ich jetzt,
und natürlich Postgres,
und dass man das in Django implementieren kann.
also,
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,
SciPy,
Machine Learning-Geschichte
mit dranhängen hat.
Das heißt jetzt,
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 Handgedenken
halt in Listen schnell zu lenken,
das geht mit Python wahrscheinlich sehr, sehr gut.
Und bei anderen Sprachen
hätte man da wahrscheinlich so ein bisschen,
na ja,
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 dann 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
Studierenden-Datenbanken,
wo man dann nach
wissenschaftlichen Texten suchen kann,
oder Juristen sind sehr gerne dabei
mit irgendwelchen Volltext-Sachen,
irgendwelchen,
die man dann auch so,
die Gesetzestexten
und Urteilsverkündungsgeschichten,
was gleich ist.
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
irgendwie Web,
was man da so macht.
Ja, oder selbst wenn es irgendwie
auf Mobilgeräten ist oder so,
dann wird man wahrscheinlich
eine API-Anfrage machen
und also letztlich
wird es auch wieder Web sein.
Ja.
Genau.
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 Standard-Korpus
von irgendwie
oder mehr
irgendwelchen Dokumenten
halt in Postgres reinhauen,
in Redis reinhauen,
in 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, vielleicht
genau.
Dann sage ich nochmal Bescheid.
Also ich meine,
es ist auch teilweise
nicht so einfach.
Bei Django ist es so,
dass es 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.
Ja.
Aber das muss ich mir nochmal,
muss ich mir auch nochmal genau angucken.
Ja, du fragst ja Fragen,
da stell mir die gerne
wie der PM.
Hallo,
Faisal Podcast.de.
Ich würde sagen,
wir sind aber jetzt mit der Dupe
so quasi durch
und wollten jetzt noch
ein bisschen Woche machen
und so.
Ja,
ja, ja.
Ja.
Oder hast du noch was,
was du zur Suche sagen willst?
Ja.
Gut.
Ja, also dann,
ich nehme jetzt deinen Pick weg.
Mhm.
Den musst du später machen.
Also,
Armin Ronacher
von Flask,
der Mensch,
der Creator,
hat etwas Schönes vorgestellt
und hat da einen kleinen Patch eingebaut.
Das heißt,
er nimmt einfach die Buildings
und packt da Sachen dran.
Und zwar True,
False und Null,
jeweils in kleinen,
in kleinen,
geschrieben
und setzt sie auf True,
False und Null.
Und dann kann man einfach
JSON lesen.
Ja,
beziehungsweise halt reinpasten.
Ja, genau.
Also,
halt direkt.
Pasten und das ist direkt
ein Dictionary-Objekt.
Das ist schon
relativ interessant.
Das ist schon eine
kleine Hack-Idee.
Ich wusste gar nicht,
dass man das so machen kann
und war,
sag ich mir so,
das geht.
War 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.
Ja.
Es ist 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
irgendwann mal
verpastet und gebaut hat.
Die sind jetzt alle
nicht perfekt implementiert
oder in
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
Webpringing
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.
So,
das steht alles drin.
Zahl,
Verschlusslogen,
Kompression.
Könnt ihr euch
alles mal angucken.
Es ist eine tolle Bibliothek.
Einfach so
Algorithms,
Python und GitHub.
Sehr interessant.
Ach so,
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,
umzustellen
auf PyEnf und Poetry
und habe das auch
auf GitHub mal dokumentiert,
wie das denn eigentlich geht.
Falls ihr das irgendwie
vorhabt,
ich empfehle,
wenn ihr das mit Poetry
machen wollt,
schmeißt alles Python,
was ihr schon drauf habt,
einmal weg,
weil es sonst
Hakeligkeiten mit
auf dem Pfad geben kann.
Dann müsst ihr vielleicht
auch einmal komplett
aufräumen und putzen,
weil,
ja,
die Dementierung
PyEnf,
Win,
das so ein bisschen
komisch löst,
die wird eure,
ja,
Windows-Libraries
mit einem grafischen
Installer dann installieren,
also die Python-Version,
das ist ein bisschen
anstrengend,
aber dann passiert
das alles automatisch
und ihr habt diesen
ganzen Struggle nicht
und dann könnt ihr
Poetry und PyEnf
wunderbar kombinieren,
auch mit,
ja,
eurer PowerShell.
Es geht aber leider
nicht so gut mit Toko,
also nehmt nicht
die Toko-Version,
sondern versucht das
auf das GitHub-Repository
zu ziehen.
Kann ich empfehlen.
Ich habe da auch
ein paar Skripte geschrieben,
die das automatischer
machen können.
Wollte ich nochmal
so kurz für die Menschen,
die tatsächlich noch
mit Windows arbeiten.
Ich habe in
NixOS reingeschaut,
das gefällt mir recht gut.
Ach, okay,
ja,
das ist auch eine
sehr coole Idee,
ja.
Ja,
dann bin ich aber noch
dabei,
meine Python-Implementierung
zu bauen,
mal gucken,
ob ich das so
weiterführe.
Ja,
aber das hat 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,
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,
ja,
haben wir auch,
aber egal.
Und zwar gibt es halt noch
einen ganz,
nicht unerheblich großen Teil
Volltext-Suche,
wo es nicht um Dinge geht,
die jetzt,
ja,
so traditionellerweise da so,
also,
dass man Queries hat,
die man so gut in Tokens
zerlegen kann,
oder wo man halt
Tokens sucht,
sondern
solche Sachen wie
Autocomplete in der Suchbox.
Ja,
also,
okay.
Oder wo man halt einfach
nur ein paar Buchstaben hat
und möchte das halt finden.
Oder man möchte halt
irgendwie einen Teil
von einem Wort finden,
irgendwo drin.
Und das ist halt nochmal
so ein bisschen
ein anderes Problem
und braucht halt ein bisschen
andere Datenstrukturen dafür.
Und,
ja,
das,
vielleicht machen wir das
auch einfach mal
in anderen Dingen.
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,
ja,
das ist ja auch Volltextsuche,
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
highlightpricemodcast.de,
das haben wir schon
gerade 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.
Tschüss.