{"id":17161,"date":"2021-06-22T05:32:52","date_gmt":"2021-06-22T03:32:52","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=17161"},"modified":"2026-04-19T07:38:29","modified_gmt":"2026-04-19T05:38:29","slug":"twarztsuche","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=17161","title":{"rendered":"Dynamische Fuzzy-Suche mit Fuse.js in Json Daten mit React App TWArztSuche"},"content":{"rendered":"<p>Eine Suche in Datenbest\u00e4nden ist keine einfache Sache! Mit <a href=\"https:\/\/www.fusejs.io\/\" rel=\"noopener\" target=\"_blank\">Fuse.js<\/a> ist ein Suche mit <a href=\"https:\/\/de.wikipedia.org\/wiki\/Fuzzylogik\" rel=\"noopener\" target=\"_blank\">Fuzzylogik<\/a> m\u00f6glich. Fuse.js ist eine m\u00e4chtige Lib ohne viele Abh\u00e4ngigkeiten.<\/p>\n<p>Eine suche mit Fuzzylogik ist eine <strong>unscharfe<\/strong> Suche und wird z. B. in der Automatisierungstechnik, Medizintechnik, Unterhaltungselektronik, KI, Fahrzeugtechnik und anderen Bereichen der Regelungstechnik verwendet. Zum Beispiel suchen wir nach dem Ort: <strong>Hameln<\/strong> und es werden uns auch Ergebnisse aus <strong>Hannover<\/strong> angezeigt. Beide beginnen mit Ha.<\/p>\n<p>Wir programmieren mal Beispielsweise eine Arztsuche mit einfache Gui, wie bei Google, mit nur einem Eingabefeld. So soll die Seite aussehen, und ein Eintrag ist auch gleich die Online-Hilfe:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.14.52.png\" alt=\"\" width=\"1592\" height=\"2202\" class=\"aligncenter size-full wp-image-17163\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.14.52.png 1592w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.14.52-217x300.png 217w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.14.52-740x1024.png 740w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.14.52-768x1062.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.14.52-1110x1536.png 1110w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.14.52-1481x2048.png 1481w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Das Ergebnis, wenn wir z.B. nach An\u00e4sthesie suchen sieht dann so aus bei den 5 Beispiel Datens\u00e4tzen: <!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.20.25.png\" alt=\"\" width=\"1684\" height=\"2414\" class=\"aligncenter size-full wp-image-17164\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.20.25.png 1684w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.20.25-209x300.png 209w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.20.25-714x1024.png 714w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.20.25-768x1101.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.20.25-1072x1536.png 1072w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/06\/wenzlaff.de-2021-06-20-um-17.20.25-1429x2048.png 1429w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Es k\u00f6nnen einige erweiterte Optionen f\u00fcr die Suche verwendet werden, wie hier beschrieben. Zum beispiel k\u00f6nnte auch eine CaseSensitive Suche aktiviert werden. In dem Beispiel der Arztsuche ist die erweiterte Suche aktiviert. D.h. es k\u00f6nnen Operatoren wie AND ( | ) oder OR verwendet werden. Oder auch Inverse genaue Suche mit !Hameln. Also alles ausser Hameln. Oder =Hameln nur genau die aus Hameln.<\/p>\n<p>Die Daten kommen aus einer Json-Datei <a href=\"https:\/\/gitlab.com\/IT-Berater\/twarztsuche\/-\/blob\/main\/src\/data.json\" rel=\"noopener\" target=\"_blank\">daten.json (Testdatei)<\/a> mit folgenden Format f\u00fcr jeden Arzt:<\/p>\n<pre class=\"lang:js decode:true \" >\r\n\r\n[\r\n\t{\r\n\t\t\"fachgebiet1\": \"weiteres Fachgebiet 1\",\r\n\t\t\"krhsName\": \"Online Hilfe: Klinik Export 20.6.2021\",\r\n\t\t\"arztNr\": \"Nr\",\r\n\t\t\"fachgebiet\": \"Fachgebiet\",\r\n\t\t\"fachgebiet3\": \"weiteres Fachgebiet 3\",\r\n\t\t\"fachgebiet2\": \"weiteres Fachgebiet 2\",\r\n\t\t\"krhsOrt\": \"Ort\",\r\n\t\t\"arztSpezielleKompetenz\": \"Spezielle Kompetenz\",\r\n\t\t\"arztSuchbegriffe\": \"Suchbegriffe\",\r\n\t\t\"krhsStrNr\": \"Strasse + Nr.\",\r\n\t\t\"krhsPlz\": \"PLZ\",\r\n\t\t\"krhsUrl\": \"Link Klinikseite\"\r\n\t}, ...\r\n<\/pre>\n<p>Es muss npm und node.js installiert sein. Fuse.js kann mit <\/p>\n<p><strong>npm install &#8211;save fuse.js<\/strong><\/p>\n<p>installiert werden. Nach der Installation kann ein<\/p>\n<p><strong>npm run test <\/strong><\/p>\n<p>ausgef\u00fchrt werden um einen ersten Junit-Test zu starten.<\/p>\n<p>Ein Ergebnis Satz wird so gerendert:<\/p>\n<pre class=\"lang:js decode:true \" >\r\n\r\n              &lt;li className=\"daten-satz\" key={ arztNr.toString() }&gt;\r\n                &lt;ul className=\"character-meta\"&gt;                   \r\n                  &lt;li&gt;&lt;div className=\"arztNummer\"&gt;{ arztNr }&lt;\/div&gt;&lt;\/li&gt;\r\n                  &lt;li&gt;&lt;div className=\"bold\"&gt;{ krhsName }&lt;\/div&gt;&lt;\/li&gt;\r\n                  &lt;li&gt;&lt;div className=\"description\"&gt;{ krhsStrNr }&lt;\/div&gt;&lt;\/li&gt;\r\n                  &lt;li&gt;&lt;div className=\"description\"&gt;{ krhsPlz } { krhsOrt }&lt;\/div&gt;&lt;\/li&gt;\r\n                  &lt;li&gt;&lt;a className=\"link\" href={krhsUrl}&gt;{ krhsUrl }&lt;\/a&gt;&lt;\/li&gt;\r\n                  &lt;li&gt;&lt;div&gt;{ fachgebiet } {addKomma( fachgebiet1 )} {addKomma( fachgebiet2 )} {addKomma( fachgebiet3 )}&lt;\/div&gt;&lt;\/li&gt; \r\n                  &lt;li&gt;&lt;div&gt;{ arztSpezielleKompetenz }&lt;\/div&gt;&lt;\/li&gt;                              \r\n                  { ifSuchbegriff(arztSuchbegriffe) }\r\n                &lt;\/ul&gt;\r\n              &lt;\/li&gt;\r\n<\/pre>\n<p>Das ganze Projekt gibt es auf <a href=\"https:\/\/gitlab.com\/IT-Berater\/twarztsuche\" rel=\"noopener\" target=\"_blank\">Gitlab<\/a> zum kostenlosen Download.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Suche in Datenbest\u00e4nden ist keine einfache Sache! Mit Fuse.js ist ein Suche mit Fuzzylogik m\u00f6glich. Fuse.js ist eine m\u00e4chtige Lib ohne viele Abh\u00e4ngigkeiten. Eine suche mit Fuzzylogik ist eine unscharfe Suche und wird z. B. in der Automatisierungstechnik, Medizintechnik, Unterhaltungselektronik, KI, Fahrzeugtechnik und anderen Bereichen der Regelungstechnik verwendet. Zum Beispiel suchen wir nach dem &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=17161\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eDynamische Fuzzy-Suche mit Fuse.js in Json Daten mit React App TWArztSuche\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,3137,79],"tags":[377,4954,4953,4462,88],"class_list":["post-17161","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-javascript","category-programmierung","tag-build","tag-fuse-js","tag-js","tag-react","tag-suchen"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/17161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17161"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/17161\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17161"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}