Was ist der effizienteste Weg, um einen komplexen Inhaltsfilter zu schreiben?

Lesezeit: 31 Minuten

Benutzeravatar von turbonerd
Turbonerd

Vor kurzem habe ich eine ziemlich lange Frage zu einem Inhaltsfilter für meine Website gestellt. Den Beitrag finden Sie hier, bitte lesen Sie ihn in Ruhe durch.

Ich habe die Antwort von @DampeS8N akzeptiert, weil er gut geantwortet und mich in die richtige Richtung geschickt hat.

Leider war das Ergebnis dieser Frage, dass der von mir verwendete Inhaltsfilter einfach zu ineffizient ist, um im Kontext meiner Anwendung ausgeführt zu werden.

Hier sind die Informationen:

  • Ich habe ~2000+ Glossarbegriffe* und ~1200+ Artenprofile**
  • Die Titel (Glossareintrag) oder wissenschaftlichen Namen (Artenprofile) dieser Beiträge bilden die Suchbegriffe für den Filter
  • Ich möchte den Inhalt meiner Artenprofile filtern (vorzugsweise beim Speichern, aber es könnte mit einem Cron-Job erfolgen), um nach den oben genannten Suchbegriffen zu suchen und sie durch Links zu den relevanten Glossareinträgen oder Artenprofilen zu ersetzen

* Ein Glossareintrag ist zu finden hier.

Eine beispielhafte Liste von Glossareinträgen könnte sein: caudal fin, dorsal,
filteretc.

** Ein Artenprofil kann gefunden werden hier.

Eine Beispielliste von Arten kann sein, Apistogramma panduro, A.
panduro
, Dario dario, D. dario, Betta sp. 'Maha Chai' usw.

Hier ist das Problem:

  • Mein CMS wird von WordPress betrieben. Dies ist für diesen Beitrag nicht besonders relevant, außer um die Struktur meiner Artenprofile zu verstehen.
  • Meine Artenprofile bestehen aus einigen grundlegenden Informationen, die in der gespeichert sind wp_posts Tabelle, dann zusätzliche Informationen in der gespeichert wp_postmeta Tisch.
  • Die meisten Informationen in meinen Artenprofilen sind in mehreren gespeichert meta fieldsdie Einträge in die sind wp_postmeta Tisch. Dies ist unten zu sehen.

http://www.seriouslyfish.com/species/puntius-sahyadriensis/

wp_postmeta

INSERT INTO `wp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES
(104395, 2288, 'genus', '<em>Puntius</em>'),
(104396, 2288, 'species', '<em>sahyadriensis</em>'),
(104397, 2288, 'family', 'Cyprinidae'),
(104398, 2288, 'common_names', ''),
(104399, 2288, 'distribution', '<a class="link_glossary" href="https://stackoverflow.com/glossary/e/endemic" rel="/glossary/e/endemic?hover=true">Endemic</a> to streams of the Yenna <a class="link_glossary" href="http://stackoverflow.com/glossary/r/river%20basin" rel="/glossary/r/river%20basin?hover=true">river basin</a> close to the city of Mahabaleshwar in the Western Ghats mountain range, Satara district, Maharashtra state, India.'),
(104400, 2288, 'habitat', 'The <a class="link_glossary" href="http://stackoverflow.com/glossary/r/river" rel="/glossary/r/river?hover=true">river</a> Yenna flows through lush evergreen forest meaning the hill streams in which the fish can be found are likely to be shaded by the forest canopy and dense <a class="link_glossary" href="http://stackoverflow.com/glossary/m/marginal" rel="/glossary/m/marginal?hover=true">marginal</a> vegetation. Substrates should be composed of boulders, smaller stones, <a class="link_glossary" href="http://stackoverflow.com/glossary/s/sand" rel="/glossary/s/sand?hover=true">sand</a> or <a class="link_glossary" href="http://stackoverflow.com/glossary/g/gravel" rel="/glossary/g/gravel?hover=true">gravel</a> with submerged tree roots around the margins and quieter areas in which fallen branches and leaf litter collect. As with similar members of the <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> it is likely to congregate in <a class="link_glossary" href="http://stackoverflow.com/glossary/b/backwater" rel="/glossary/b/backwater?hover=true">backwater</a> pools or deeper areas with lower flow.'),
(104402, 2288, 'max_size', 'Around 2.75"/7cm.'),
(104403, 2288, 'aquarium_size', 'It is an active <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> and a <a class="link_glossary" href="http://stackoverflow.com/glossary/t/tank" rel="/glossary/t/tank?hover=true">tank</a> measuring at least 36" x 12" x 12"/90cm x 30cm x 30cm/85 litres is needed to house a group.'),
(104404, 2288, 'maintenance', 'Choice of decor is not as critical as water quality and the amount of swimming-space provided. We suggest keeping it in a roomy, well-planted <a class="link_glossary" href="http://stackoverflow.com/glossary/a/aquarium" rel="/glossary/a/aquarium?hover=true">aquarium</a> or alternatively it would look superb in a set-up designed to resemble a flowing <a class="link_glossary" href="http://stackoverflow.com/glossary/r/river" rel="/glossary/r/river?hover=true">river</a> with a <a class="link_glossary" href="http://stackoverflow.com/glossary/s/substrate" rel="/glossary/s/substrate?hover=true">substrate</a> of variably-sized rocks and <a class="link_glossary" href="http://stackoverflow.com/glossary/g/gravel" rel="/glossary/g/gravel?hover=true">gravel</a> and some large water-worn boulders. A rivertank manifold could also be constructed to provide naturalistic unidirectional flow. The <a class="link_glossary" href="http://stackoverflow.com/glossary/t/tank" rel="/glossary/t/tank?hover=true">tank</a> can be further furnished with driftwood branches and <a class="link_glossary" href="http://stackoverflow.com/glossary/a/aquatic" rel="/glossary/a/aquatic?hover=true">aquatic</a> plants for aesthetic value. While the vast majority of plant <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> will fail to thrive in such conditions possibilities include hardy <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> such as Java fern, <em>Bolbitis</em> or <em>Anubias</em> <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> which can be grown attached to the decor. Like many other <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> that hail from pristine natural environments it is intolerant to the accumulation of <a class="link_glossary" href="http://stackoverflow.com/glossary/o/organic" rel="/glossary/o/organic?hover=true">organic</a> wastes and requires spotless water at all times in order to thrive.'),
(104405, 2288, 'water_chemistry', '<strong>Temperature</strong>: Prefers slightly cool conditions within the range 20 - 24°C/68 - 75°C. Higher temperatures are known to stimulate spawning with an associated increase of aggression in males.\r\n\r\n<strong>pH</strong>: 6.8 - 7.8\r\n\r\n<strong>Hardness</strong>: 5 - 15°H'),
(104406, 2288, 'diet', 'Likely to feed on small invertebrates, <a class="link_glossary" href="http://stackoverflow.com/glossary/a/algae" rel="/glossary/a/algae?hover=true">algae</a> and other <a class="link_glossary" href="http://stackoverflow.com/glossary/z/zooplankton" rel="/glossary/z/zooplankton?hover=true">zooplankton</a> in nature. In the <a class="link_glossary" href="http://stackoverflow.com/glossary/a/aquarium" rel="/glossary/a/aquarium?hover=true">aquarium</a> it will accept dried foods of a suitable size but should not be fed these exclusively. Daily meals of small live and frozen fare such as <em><a class="link_glossary" href="http://stackoverflow.com/glossary/D/Daphnia" rel="/glossary/D/Daphnia?hover=true">Daphnia</a></em>, <em><a class="link_glossary" href="http://stackoverflow.com/glossary/A/Artemia" rel="/glossary/A/Artemia?hover=true">Artemia</a></em> and suchlike will result in the best colouration and encourage the fish to come into breeding condition.'),
(104407, 2288, 'behaviour', 'Not an aggressive fish but best kept with other hillstream-dwelling <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> such as <em>Danio</em>, <em>Devario</em>, other small <em>Puntius</em>, <em>Garra</em> and balitorid loaches. That said provided its oxygen and temperature requirements can be met it can be mixed with most peaceful fish too large to be considered food. A <a class="link_glossary" href="http://stackoverflow.com/glossary/b/biotope" rel="/glossary/b/biotope?hover=true">biotope</a>-style <a class="link_glossary" href="http://stackoverflow.com/glossary/c/community" rel="/glossary/c/community?hover=true">community</a> based around <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> from hill streams of the Western Ghats would also make an interesting project with <em><a class="link_species" href="http://stackoverflow.com/species/puntius-filamentosus" rel="/species/puntius-filamentosus/?hover=true">Puntius filamentosus</a></em>, <em><a class="link_species" href="http://stackoverflow.com/species/puntius-fasciatus" rel="/species/puntius-fasciatus/?hover=true">P. fasciatus</a></em>, <em><a class="link_species" href="http://stackoverflow.com/species/puntius-narayani" rel="/species/puntius-narayani/?hover=true">P. narayani</a></em>, <em><a class="link_species" href="http://stackoverflow.com/species/puntius-ticto" rel="/species/puntius-ticto/?hover=true">P. ticto</a></em>, <em>Barilius bakeri</em>, <em>B. canarensis</em>, <em><a class="link_species" href="http://stackoverflow.com/speciesario-aequipinnatus" rel="/speciesario-aequipinnatus/?hover=true">Devario aequipinnatus</a></em>, <em><a class="link_species" href="http://stackoverflow.com/speciesario-malabaricus" rel="/speciesario-malabaricus/?hover=true">D. malabaricus</a></em>, <em>Rasbora daniconius</em>, <em>Laubuca laubuca</em>, <em>Nemacheilus rupelli</em>, <em>Mesonemacheilus triangularis</em> and <em><a class="link_species" href="http://stackoverflow.com/species/mesonoemacheilus-guentheri" rel="/species/mesonoemacheilus-guentheri/?hover=true">M. guentheri</a></em> among the numerous suitable <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> available in the trade at times.\r\n\r\nIt''s a shoaling <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> by nature and really should be kept in a group of at least 8-10 specimens. Maintaining it in decent numbers will not only make the fish less nervous but will result in a more effective, natural-looking display while allowing individuals some respite from the vigorous alpha male(s). Males will also display their best colours and some interesting behaviour as they compete with one other for female attention. In particular the dominant individual in a given group will develop some stunning colouration.'),
(104408, 2288, 'dimorphism', 'The male is noticeably slimmer and more brightly coloured than the female especially when the fish are in <a class="link_glossary" href="http://stackoverflow.com/glossary/s/spawning" rel="/glossary/s/spawning?hover=true">spawning</a> condition. Most notably the body colouration is more intense, <a class="link_glossary" href="http://stackoverflow.com/glossary/v/ventral" rel="/glossary/v/ventral?hover=true">ventral</a> fins tipped with white, other finnage redder and prominent tubercules develop around the <a class="link_glossary" href="http://stackoverflow.com/glossary/s/snout" rel="/glossary/s/snout?hover=true">snout</a> and head in sexually <a class="link_glossary" href="http://stackoverflow.com/glossary/m/mature" rel="/glossary/m/mature?hover=true">mature</a> specimens.'),
(104409, 2288, 'reproduction', 'We''re not sure if it has been bred in the hobby although it should certainly be possible. Like most cyprinids this <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> is an <a class="link_glossary" href="http://stackoverflow.com/glossary/e/egg" rel="/glossary/e/egg?hover=true">egg</a>-scattering, continuous spawner that exhibits no <a class="link_glossary" href="http://stackoverflow.com/glossary/p/parental%20care" rel="/glossary/p/parental%20care?hover=true">parental care</a>. That is to say when the fish are in good condition they will <a class="link_glossary" href="http://stackoverflow.com/glossary/s/spawn" rel="/glossary/s/spawn?hover=true">spawn</a> often and in a well-furnished, <a class="link_glossary" href="http://stackoverflow.com/glossary/m/mature" rel="/glossary/m/mature?hover=true">mature</a> <a class="link_glossary" href="http://stackoverflow.com/glossary/a/aquarium" rel="/glossary/a/aquarium?hover=true">aquarium</a> it is feasible that small numbers of <a class="link_glossary" href="http://stackoverflow.com/glossary/f/fry" rel="/glossary/f/fry?hover=true">fry</a> may start to appear without human intervention.\r\n\r\nHowever if you want to increase the yield of <a class="link_glossary" href="http://stackoverflow.com/glossary/f/fry" rel="/glossary/f/fry?hover=true">fry</a> a slightly more controlled approach is required and we suggest using an approach that has proven successful for similar members of the <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> as a starting point. The adult group can still be conditioned together but one or more small, say 18" x 10" x 10"/45cm x 25cm x 25cm/29.5 <a class="link_glossary" href="http://stackoverflow.com/glossary/l/litre" rel="/glossary/l/litre?hover=true">litre</a> containers should also be set up and half-filled with water. These should be very dimly lit with the <a class="link_glossary" href="http://stackoverflow.com/glossary/b/base" rel="/glossary/b/base?hover=true">base</a> either left bare or covered with some kind of mesh of a large enough grade so that any eggs that fail to adhere to the plant can pass through but small enough so that the adults cannot reach them. The widely available plastic ''grass''-<a class="link_glossary" href="http://stackoverflow.com/glossary/t/type" rel="/glossary/t/type?hover=true">type</a> matting can also be used and works very well. A decent-sized clump of Java moss or other fine-leaved plant should also be added filling perhaps half the available space. The water should be around <a class="link_glossary" href="http://stackoverflow.com/glossary/n/neutral" rel="/glossary/n/neutral?hover=true">neutral</a> <a class="link_glossary" href="http://stackoverflow.com/glossary/p/pH" rel="/glossary/p/pH?hover=true">pH</a>, <a class="link_glossary" href="http://stackoverflow.com/glossary/G/GH" rel="/glossary/G/GH?hover=true">gH</a> &lt;8, with a slightly raised temperature of 75 - 80°F. A small air-powered <a class="link_glossary" href="http://stackoverflow.com/glossary/s/sponge%20filter" rel="/glossary/s/sponge%20filter?hover=true">sponge filter</a> bubbling away very gently is all that is needed in terms of filtration.\r\n\r\nWhen the adult fish are well-conditioned and the females appear full of eggs a single <a class="link_glossary" href="http://stackoverflow.com/glossary/p/pair" rel="/glossary/p/pair?hover=true">pair</a> should then be introduced to each container. If conditions are to their liking they should <a class="link_glossary" href="http://stackoverflow.com/glossary/s/spawn" rel="/glossary/s/spawn?hover=true">spawn</a> the following morning. Be sure to provide plenty of cover for the female as the male may be quite aggressive in his pursuit of her. In some cases she might even require a period of post-<a class="link_glossary" href="http://stackoverflow.com/glossary/s/spawning" rel="/glossary/s/spawning?hover=true">spawning</a> rehabilitation in a <a class="link_glossary" href="http://stackoverflow.com/glossary/t/tank" rel="/glossary/t/tank?hover=true">tank</a> that does not contain any males.\r\n\r\nThe adults will eat the eggs given the chance and should be removed as soon as any are noticed. Incubation in <em>Puntius</em> eggs is temperature-dependant to an extent but usually takes between 20 and 48 hours with the young free-swimming 24 to 48 hours later. Initial food should be <em>Paramecium</em> or similar introducing <em><a class="link_glossary" href="http://stackoverflow.com/glossary/A/Artemia" rel="/glossary/A/Artemia?hover=true">Artemia</a></em> <a class="link_glossary" href="http://stackoverflow.com/glossary/n/nauplii" rel="/glossary/n/nauplii?hover=true">nauplii</a> and/or <a class="link_glossary" href="http://stackoverflow.com/glossary/m/microworm" rel="/glossary/m/microworm?hover=true">microworm</a> once the <a class="link_glossary" href="http://stackoverflow.com/glossary/f/fry" rel="/glossary/f/fry?hover=true">fry</a> are large enough to accept them.'),
(104410, 2288, 'misc_notes', 'This beautiful <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> is not often seen in the hobby, presumably as a result of its limited distribution, and tends to command a relatively high price when available. It may be seen on sale under the trade names ''Maharaja'' or ''Khavli'' <a class="link_glossary" href="http://stackoverflow.com/glossary/b/barb" rel="/glossary/b/barb?hover=true">barb</a>.\r\n\r\nThe <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> <em>Puntius</em> is currently viewed as something of a catch-all for well over 100 <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> of small cyprinid. Most experts agree that a full <a class="link_glossary" href="http://stackoverflow.com/glossary/r/revision" rel="/glossary/r/revision?hover=true">revision</a> is required, with the likely outcome that many <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> will be placed into new or different <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genera" rel="/glossary/g/genera?hover=true">genera</a>. When describing the <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> in 1822, Hamilton identified the defining characteristics as: "absence or presence of <a class="link_glossary" href="http://stackoverflow.com/glossary/m/maxillary" rel="/glossary/m/maxillary?hover=true">maxillary</a> only or <a class="link_glossary" href="http://stackoverflow.com/glossary/r/rostral" rel="/glossary/r/rostral?hover=true">rostral</a> and <a class="link_glossary" href="http://stackoverflow.com/glossary/m/maxillary" rel="/glossary/m/maxillary?hover=true">maxillary</a> barbels; <a class="link_glossary" href="http://stackoverflow.com/glossary/d/dorsal" rel="/glossary/d/dorsal?hover=true">dorsal</a> <a class="link_glossary" href="http://stackoverflow.com/glossary/f/fin" rel="/glossary/f/fin?hover=true">fin</a> with last <a class="link_glossary" href="http://stackoverflow.com/glossary/s/simple%20ray" rel="/glossary/s/simple%20ray?hover=true">simple ray</a> <a class="link_glossary" href="http://stackoverflow.com/glossary/s/serrate" rel="/glossary/s/serrate?hover=true">serrate</a> or entire, <a class="link_glossary" href="http://stackoverflow.com/glossary/b/branched%20rays" rel="/glossary/b/branched%20rays?hover=true">branched rays</a> usually 8; anal <a class="link_glossary" href="http://stackoverflow.com/glossary/f/fin" rel="/glossary/f/fin?hover=true">fin</a> with last <a class="link_glossary" href="http://stackoverflow.com/glossary/s/simple%20ray" rel="/glossary/s/simple%20ray?hover=true">simple ray</a> entire, <a class="link_glossary" href="http://stackoverflow.com/glossary/b/branched%20rays" rel="/glossary/b/branched%20rays?hover=true">branched rays</a> usually 5; <a class="link_glossary" href="http://stackoverflow.com/glossary/l/lateral%20line" rel="/glossary/l/lateral%20line?hover=true">lateral line</a> complete or incomplete, <a class="link_glossary" href="http://stackoverflow.com/glossary/l/lateral" rel="/glossary/l/lateral?hover=true">lateral</a>-line scales 17-36 in row; <a class="link_glossary" href="http://stackoverflow.com/glossary/c/cephalic" rel="/glossary/c/cephalic?hover=true">cephalic</a> <a class="link_glossary" href="http://stackoverflow.com/glossary/c/cutaneous" rel="/glossary/c/cutaneous?hover=true">cutaneous</a> <a class="link_glossary" href="http://stackoverflow.com/glossary/p/papillae" rel="/glossary/p/papillae?hover=true">papillae</a> minute or absent; <a class="link_glossary" href="http://stackoverflow.com/glossary/p/pharyngeal%20teeth" rel="/glossary/p/pharyngeal%20teeth?hover=true">pharyngeal teeth</a> in 3 rows, usually 2,3,5/5,3,2; colour pattern extremely variable." All the <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> currently in the <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> are <a class="link_glossary" href="https://stackoverflow.com/glossary/n/native" rel="/glossary/n/native?hover=true">native</a> to Southeast Asia, India and Sri Lanka.\r\n\r\nThe other main source of confusion with <em>Puntius</em> is that some authors do not recognise all the member <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> as such, rather following Walter Rainboth (1996) and preferring to place some into the alternative <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> <em>Systomus</em>. Rainboth proposed that <em>Systomus</em> should be reinstated (it was first erected in the 19th century) as a valid <a class="link_glossary" href="http://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> on account of the fact that in its current state <em>Puntius</em> would seem to constitute a <a class="link_glossary" href="http://stackoverflow.com/glossary/p/polyphyletic" rel="/glossary/p/polyphyletic?hover=true">polyphyletic</a> grouping i.e. not all of its members appear to have descended from the same common ancestor. The defining characteristics of a <em>Systomus</em> <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> are (according to Rainboth) a <a class="link_glossary" href="http://stackoverflow.com/glossary/s/serrated" rel="/glossary/s/serrated?hover=true">serrated</a> (vs. smooth in <em>Puntius</em>) <a class="link_glossary" href="http://stackoverflow.com/glossary/d/dorsal" rel="/glossary/d/dorsal?hover=true">dorsal</a> <a class="link_glossary" href="http://stackoverflow.com/glossary/s/spine" rel="/glossary/s/spine?hover=true">spine</a>, the presence of 2 or 4 barbels (vs. always 2) and less than 12 <a class="link_glossary" href="http://stackoverflow.com/glossary/g/gill" rel="/glossary/g/gill?hover=true">gill</a> rakers (vs. 12-20). SF tentatively lists all <a class="link_glossary" href="http://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> as <em>Puntius</em> at present.'),
(167927, 2288, 'etymology', ''),
(104421, 2288, 'attached_media', 'a:4:{i:0;s:5:"22881";i:1;s:5:"22882";i:2;s:5:"22883";i:3;s:5:"22884";}'),
(150578, 2288, 'references', 'a:2:{i:0;a:5:{s:13:"ref_doc_title";s:67:"Assemblage structure of stream fishes in the Western Ghats (India).";s:12:"ref_pub_year";s:0:"";s:13:"ref_page_nums";s:5:"1-31.";s:14:"ref_publishers";s:17:"Hydrobiologia 430";s:11:"ref_authors";s:19:"Arunachalam M. 2000";}i:1;a:5:{s:13:"ref_doc_title";s:0:"";s:12:"ref_pub_year";s:0:"";s:13:"ref_page_nums";s:0:"";s:14:"ref_publishers";s:16:"www.fishbase.org";s:11:"ref_authors";s:0:"";}}'),
(167925, 2288, '_edit_lock', '1341244017:4'),
(167928, 2288, 'species_author', 'Silas'),
(167929, 2288, 'year_described', '1953'),
(167930, 2288, 'beginner_suitability', '3'),
(167931, 2288, 'type_of_fish', '2')

wp_posts

INSERT INTO `wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES
(2288, 4, '2012-03-13 13:24:32', '2012-03-13 13:24:32', '', 'Puntius sahyadriensis', 'This beautiful species is not often seen in the hobby, presumably as a result of its limited distribution, and tends to command a relatively high price when available. It may be seen on sale under the trade names &#039;Maharaja&#039; or &#039;Khavli&#039; barb.\r\n\r\nThe genus Puntius is currently viewed as something of a catch-all for well over 100 species of small cyprinid. Most experts agree that a full revision is required, with the likely outcome that many species will be placed into new or di...', 'publish', 'open', 'open', '', 'puntius-sahyadriensis', '', '', '2012-07-02 16:48:43', '2012-07-02 15:48:43', '', 0, 'http://www.seriouslyfish.com/?post_type=species&#038;p=2288', 0, 'species', '', 0);

Wie Sie sehen können, ist der Inhalt der Artenprofile unglaublich lang. Hoffentlich zeigt Ihnen dies auch die Art von Link, den ich verwenden möchte, um meine Pop-ups zu erhalten:

<a class="link_glossary" href="https://stackoverflow.com/glossary/n/native" rel="/glossary/n/native?hover=true">native</a>

Mein Problem ist folgendes: den Filter lasse ich im Moment laufenderen Details im ersten verlinkten Beitrag zu finden sind, oder direkt hier für mein filter.php Datei, ist einfach nicht effizient genug, um mit so vielen Datenbankfeldern und so vielen Informationen zu arbeiten.

Der Filter funktionierte, als ich anfing, unser neues WordPress-basiertes CMS zu verwenden, da ich es auf einer Localhost-WAMP-Installation ausführte, als ich die Daten importierte. Es dauerte fast 40 Minuten, alle Daten durchzugehen.


Meine tl;dr Frage ist folgende: Wie kann ich einen effizienten Inhaltsfilter erstellen?angesichts der Datenmenge und Anzahl der Datenbankfelder?

  • Haben Sie die Kontrolle über den Server? Wie zum Beispiel installieren memcached?

    – invisal

    7. Juli 2012 um 16:35 Uhr

  • Ja – volle Kontrolle über den Server, aber begrenzte Linux-Kenntnisse. Wenn es ein Tutorial dafür gibt, kann ich es wahrscheinlich schaffen 🙂

    – Turbonerd

    8. Juli 2012 um 13:05 Uhr

  • Meine Antwort aktualisiert. Ich werde eine Einführung hinzufügen memcached von dem ich glaube, dass es Ihnen helfen kann, die Leistungsgeschwindigkeit zu verbessern, wenn ich Freizeit habe.

    – invisal

    8. Juli 2012 um 14:52 Uhr

  • Ich habe gerade diesen Artikel gesehen … er kann Ihnen helfen: moinne.com/blog/ronald/mysql/…

    – Gavin Towey

    9. Juli 2012 um 23:16 Uhr

Benutzeravatar von invisal
invisal

Datenbankstruktur

wp_postmeta (meta_id, post_id, meta_key, meta_value)
wp_glossary (glossary_id, glossary_key, glossary_value)
wp_relation (meta_id, glossary_id)

wp_relation speichert die Beziehung zwischen wp_glossary und wp_postmeta. Das Folgende ist ein Beispiel für den Eintrag von wp_postmeta:

Wartung
Panzer sollte gut bepflanzt mit Schwimmpflanzen auch verwendet werden. Dafür sollten reichlich Versteckmöglichkeiten geschaffen werden Spezies versteckt sich tagsüber gerne. BogwoodFelshöhlen und PVC-Rohre eignen sich für diesen Zweck. Sand verwendet werden soll als Substrat da sich die Stachelaale gerne selbst vergraben. Eine gedämpfte Beleuchtung ermutigt die Fische, sich öfter aus ihren Verstecken zu wagen. Eine enganliegende Haube ist erforderlich, denn der Aal findet seinen Weg durch kleinste Ritzen. Der Wasserfluss sollte ziemlich sanft sein, da der Fisch in freier Wildbahn hauptsächlich Bereiche mit stillem Wasser bewohnt.

Das Folgende ist ein Beispiel für die Einträge von wp_glossary

glossary_id | glossary_key | glossary_value
         101   tank           ......
         102   species        ......
         103   bogwood        ......
         104   sand           ......
         105   substrate      ......

Das Folgende ist ein Beispiel dafür, wie wp_relation die Beziehung zwischen Glossar und Postmeta hält. Angenommen, die obige Postmeta-ID ist 405

glossary_id | meta_id 
         101   405       
         102   405  
         103   405    
         104   405       
         105   405  

Ausgabeprofil

Sobald Sie die obige Datenbankstruktur beibehalten können, können Sie ganz einfach einen Glossar-Link für jedes wp_postmeta erstellen, indem Sie die ID des wp_postmeta-Eintrags in wp_relation suchen. Dann mit str_replace Link zu Ihren Inhalten zu füllen.

Um die Leistung zu steigern, können Sie den Ergebnisinhalt in HTML zwischenspeichern. Legen Sie das Ablaufen des Caches auf 1 oder 2 Tage fest (abhängig davon, wie oft Sie Ihr Glossar und Ihren Website-Traffic aktualisieren). Sie können verwenden memcached, file oder database um Ihren Cache zu speichern.


Datenbankstruktur pflegen

Die schwierigste Aufgabe besteht darin, unsere Datenbankbeziehung aufrechtzuerhalten. Es gibt zwei Hauptaktionen, die die Datenbankbeziehung ändern.

Glossar ändern

  • Neues Glossar hinzufügen: Durchsuchen Sie wp_postmeta und konstruieren Sie eine Beziehung.
  • Glossar entfernen: Lösche alle Beziehungen zwischen diesem Glossar und anderen wp_postmeta
  • Glossar bearbeiten: Es ist eine Kombination aus Glossar entfernen und neues Glossar hinzufügen.

Alter Postmeta

  • Postmeta hinzufügen/bearbeiten: Zusammenhang zwischen Glossar und Inhalt rekonstruieren. Unten ist ein Algorithmus, der verwendet werden kann, um eine Beziehung zu konstruieren. Ich glaube, es gibt andere bessere Möglichkeiten, dies zu tun. Der Code ist nicht vollständig (ich habe ihn noch nicht getestet), aber er reicht aus, um den Algorithmus zu verstehen.

    // Initialize text to add glossary link
    $desc = "Tank should be well planted with floating plants also used. 
            An abundance of hiding places should be provided as this species 
            likes to hide away during the day. Bogwood, rock caves and PVC 
            piping are all suitable for this purpose. Sand should be used as 
            substrate as the spiny eels often like to bury themselves. 
            Dimmer lighting will encourage the fish to venture from 
            its hiding places more often. A close-fitting hood is required 
            as the eel can find its way through the smallest of gaps. Water 
            flow should be fairly gentle as the fish mainly inhabits 
            areas of still water in the wild.";
    
    // Split text into list of words
    $split = preg_split("/[.,\s]+/", $desc);
    
    // Frequency English words
    $freq['will'] = true;
    $freq['also'] = true;
    $freq['with'] = true;
    $freq['about'] = true;
    $freq['back'] = true;
    $freq['been'] = true;
    $freq['were'] = true;
    $freq['want'] = true;
    
    // Get list of unqiue word and elimate unnessary words
    foreach($split as $value) {
        $value = strtolower($value);
    
        if (strlen($value) < 4) continue;
        if (is_numeric($value)) continue;
        if (isset($freq[$value])) continue;
    
        if (!isset($hash[$value])) $hash[$value] = true;
    }
    
    // Join the list for search
    $keys = "";
    foreach ($hash as $key => $value)
        $keys .= "^{$key}|";
    $keys = rtrim($keys, '|');
    
    // Search for list of glossary
    $glossary;
    $result = mysql_query("SELECT glossary_id,glossary_key FROM wp_glossary  WHERE gossary_key REGEXP '{$keys}'")
    if ($result) {
        while($row = mysql_fetch_row($result)) {
            if (strpos($desc, $row[1]) !== false)
                $glossary[$row[0]] = $row[1];
        }
    }
    
    // You can start to construct the relation from this $glossary
    // by loop throught it one by one and insert it into wp_relation
    print_r($glossary);
    
  • Postmeta entfernen: Entfernen Sie die Beziehung zwischen diesem Postmeta und dem Glossar.


Zusätzliche Vorteile

Nehmen wir an, Sie finden heraus, welches Artenprofil das Glossar “Moosholz” verwendet. Sie können es einfach über wp_relation verfolgen.


Fragen

1. Erstens, wie wirkt sich ein str_replace auf meine Artenprofile aus, die einen bestehenden Code enthalten, dh einen href- oder img-Code?

Es wirkt sich nicht auf Ihre Artenprofile aus, wenn dies nicht der Fall ist a link zum Glossar und Artnamen.

2. Zweitens haben Sie die Glossareinträge erwähnt, aber nicht die etwas komplexeren Artengattungs-/Artennamen. Würde ich dafür eine separate Tabelle verwenden oder alles in eine integrieren?

Sie können eine separate Tabelle haben, um die Beziehung zwischen Artnamen und Postmeta zu speichern, oder Sie können Artnamen einfach als Glossarbegriff mit einem speziellen Flag behandeln (was die Struktur des Glossars ändern muss).

3. Wie würde ich dann den Unterschied (andere Klasse im a-Tag) zwischen Glossareinträgen und Artenprofilen angeben?

Die Beantwortung hängt davon ab, welche Methode Sie für Ihre zweite Frage verwenden.

  • Ausgezeichneter Post invisal, danke für Ihre Zeit. Ich mag deine Idee sehr, aber ich habe ein paar Probleme. Erstens, wie wirkt sich ein str_replace auf meine aus species Profile mit vorhandenem Code, dh a href oder img Code? Zweitens haben Sie die Glossareinträge erwähnt, aber nicht die etwas komplexeren species Gattungs-/Artennamen. Würde ich dafür eine separate Tabelle verwenden oder alles in eine integrieren? Wie würde ich dann den Unterschied angeben (andere Klasse in der a Tag) zwischen Glossareinträgen und Artenprofilen? Danke noch einmal! 🙂

    – Turbonerd

    8. Juli 2012 um 13:09 Uhr

  • Invisal, ich beziehe mich auf etwas ganz anderes. Überprüfen Sie die ersten beiden Aufzählungspunkte meiner Frage, beginnend I have ~2000+ glossary terms* and ~1200+ species profiles**. Neben Glossareinträgen muss ich nach den Namen von Fischarten suchen, dh Apistogramma agassizii die oft als bezeichnet werden A. agassizii.

    – Turbonerd

    8. Juli 2012 um 14:11 Uhr

  • Ah, ich habe vergessen, dass Sie nicht nur Glossarbegriffe, sondern auch Artenprofile verlinken müssen. In jedem Fall benötigen Sie einen anderen Tisch.

    – invisal

    8. Juli 2012 um 14:15 Uhr

  • Unter der Annahme, dass es keinen Link für Glossarbegriffe und Artenprofile gibt, verwenden Sie str_replace betrifft nicht

    – invisal

    8. Juli 2012 um 14:22 Uhr

  • “Angenommen, es gibt keinen Link”?

    – Turbonerd

    9. Juli 2012 um 10:48 Uhr

Hier ist ein weiterer Gedanke, machen Sie das Markup auf dem Client.

Extrahieren Sie die Taxonomien als Textdateien und cachen Sie die “Transformationsbegriffe”.

guppie
salmon

Lassen Sie JS sie durchgehen, während der Leser die Seite liest, und schreiben Sie die URLs neu.

<a href="https://stackoverflow.com/section/guppie">guppie</a> and a <a href="http://stackoverflow.com/section/salmon">salmon</a>

Es gibt bestimmt mehr im Netz über diese Methode seit einer alten Diskussion, die ich hier mal hatte.

Ich bin auch über dieses Tutorial gestolpert WP Benutzerdefinierte Taxonomien die für Ihren Fall relevant sein könnten.

  • Das ist eine interessante Idee. Ich habe darüber nachgedacht, da ich einige Websites gesehen habe, auf denen die Links/Popups erst etwa eine Sekunde nach dem Laden des Seiteninhalts angezeigt werden. Ich wusste einfach nicht, wo ich anfangen sollte! Ich nehme an, Sie konnten keine nützlichen Referenzen finden?

    – Turbonerd

    8. Juli 2012 um 13:07 Uhr

  • TBH, diese JS-Lösung war vor 8 Jahren und ich habe sie implementiert, aber seitdem haben sich die Dinge möglicherweise ziemlich weiterentwickelt. Ich habe überlegt, dass ich es wahrscheinlich mit HTML5 und lokalem Speicher für moderne Browser versuchen würde. Ansonsten besteht immer die Möglichkeit, die Seiteninhalte zwischenzuspeichern und SED zu verwenden, um die Umschreibungen auf der Serverseite durchzuführen.

    – Tassen

    8. Juli 2012 um 14:23 Uhr

Haben Sie überlegt, a Ternärer Suchbaum?

Dies ist die Datenstruktur, die ich bevorzuge, wenn ich vor dem Problem “finde x Anzahl von Wörtern in Textmasse y” stehe.

Beispielbaum gebaut (fin, filter, caudal, gal, knallig):

        f
       /|\
caudal* i ga
        |  | 
        n* l*
       /    \
    lter*    udy*

* = end node

Und der Algorithmus wird in etwa so aussehen:

  • Beginnen Sie das passende Wort am Wurzelknoten.
  • Solange die aktuelle Position übereinstimmt, bewegen Sie sich nach unten.
  • Wenn aktuelle Position < Knoten. Geh nach links.
  • Wenn aktuelle Position > Knoten. Nach rechts bewegen.
  • Wenn das Wort fertig ist und der Knoten der Endknoten ist. Wort gefunden.
  • Wenn Bewegung nach links/rechts nicht möglich ist oder Wort in Nicht-Endknoten endet. Wort nicht gefunden.

Hier ist ein gutes Beispiel.

Der Vorteil besteht darin, dass der Baum vorberechnet und in irgendeiner serialisierten Form gespeichert werden kann. Es ist oft sogar möglich, einen vorgefertigten Baum entweder zu erstellen oder an den Client zu übertragen und den Abgleich im Browser vorzunehmen.

1405200cookie-checkWas ist der effizienteste Weg, um einen komplexen Inhaltsfilter zu schreiben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy