编写复杂内容过滤器的最有效方法是什么?

更新于 2022年1月22日 wordpress教程
  • 我有大约 2000 多个术语表和大约 1200 多个物种简介
  • 这些帖子的标题(词汇表条目)或科学名称(物种概况)构成了过滤器的搜索词
  • 我想过滤我的物种概况的内容(最好在保存时,但可以通过 cron 工作来完成)以搜索上述搜索词并将它们替换为指向相关词汇表条目或物种概况的链接

词汇表条目

编写复杂内容过滤器的最有效方法是什么?

词汇表条目的示例列表可能是caudal findorsalfilter等。

物种概况

物种的示例列表可以是Apistogramma panduroA. panduroDario darioD. darioBetta sp. 'Maha Chai' Betta sp. 'Maha Chai'等。

这是问题所在:

  • 我的 CMS 是由 WordPress 驱动的。 除了了解我的物种概况的结构之外,这与这篇文章没有特别的关系。
  • 我的物种概况由存储在wp_posts表中的一些基本信息和存储在wp_postmeta表中的附加信息wp_postmeta
  • 我的物种概况中的大部分信息都存储在许多meta fields ,这些meta fieldswp_postmeta表的条目。 这可以在下面看到。

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="https://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="https://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="https://stackoverflow.com/glossary/m/marginal" rel="/glossary/m/marginal?hover=true">marginal</a> vegetation. Substrates should be composed of boulders, ***aller stones, <a class="link_glossary" href="https://stackoverflow.com/glossary/s/sand" rel="/glossary/s/sand?hover=true">sand</a> or <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> it is likely to congregate in <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> and a <a class="link_glossary" href="https://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="https://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="https://stackoverflow.com/glossary/r/river" rel="/glossary/r/river?hover=true">river</a> with a <a class="link_glossary" href="https://stackoverflow.com/glossary/s/substrate" rel="/glossary/s/substrate?hover=true">substrate</a> of variably-sized rocks and <a class="link_glossary" href="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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.rnrn<strong>pH</strong>: 6.8 - 7.8rnrn<strong>Hardness</strong>: 5 - 15°H'),
(104406, 2288, 'diet', 'Likely to feed on ***all invertebrates, <a class="link_glossary" href="https://stackoverflow.com/glossary/a/algae" rel="/glossary/a/algae?hover=true">algae</a> and other <a class="link_glossary" href="https://stackoverflow.com/glossary/z/zooplankton" rel="/glossary/z/zooplankton?hover=true">zooplankton</a> in nature. In the <a class="link_glossary" href="https://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 ***all live and frozen fare such as <em><a class="link_glossary" href="https://stackoverflow.com/glossary/D/Daphnia" rel="/glossary/D/Daphnia?hover=true">Daphnia</a></em>, <em><a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> such as <em>Danio</em>, <em>Devario</em>, other ***all <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="https://stackoverflow.com/glossary/b/biotope" rel="/glossary/b/biotope?hover=true">biotope</a>-style <a class="link_glossary" href="https://stackoverflow.com/glossary/c/community" rel="/glossary/c/community?hover=true">community</a> based around <a class="link_glossary" href="https://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="https://stackoverflow.com/species/puntius-filamentosus" rel="/species/puntius-filamentosus/?hover=true">Puntius filamentosus</a></em>, <em><a class="link_species" href="https://stackoverflow.com/species/puntius-fasciatus" rel="/species/puntius-fasciatus/?hover=true">P. fasciatus</a></em>, <em><a class="link_species" href="https://stackoverflow.com/species/puntius-narayani" rel="/species/puntius-narayani/?hover=true">P. narayani</a></em>, <em><a class="link_species" href="https://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="https://stackoverflow.com/speciesario-aequipinnatus" rel="/speciesario-aequipinnatus/?hover=true">Devario aequipinnatus</a></em>, <em><a class="link_species" href="https://stackoverflow.com/speciesario-malabaricus" rel="/speciesario-malabaricus/?hover=true">D. malabaricus</a></em>, <em>Ra***ora daniconius</em>, <em>Laubuca laubuca</em>, <em>Nemacheilus rupelli</em>, <em>Mesonemacheilus triangularis</em> and <em><a class="link_species" href="https://stackoverflow.com/species/mesonoemacheilus-guentheri" rel="/species/mesonoemacheilus-guentheri/?hover=true">M. guentheri</a></em> among the numerous suitable <a class="link_glossary" href="https://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> available in the trade at times.rnrnIt''s a shoaling <a class="link_glossary" href="https://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, 'dimorphi***', 'The male is noticeably slimmer and more brightly coloured than the female especially when the fish are in <a class="link_glossary" href="https://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="https://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="https://stackoverflow.com/glossary/s/snout" rel="/glossary/s/snout?hover=true">snout</a> and head in sexually <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> is an <a class="link_glossary" href="https://stackoverflow.com/glossary/e/egg" rel="/glossary/e/egg?hover=true">egg</a>-scattering, continuous spawner that exhibits no <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/s/spawn" rel="/glossary/s/spawn?hover=true">spawn</a> often and in a well-furnished, <a class="link_glossary" href="https://stackoverflow.com/glossary/m/mature" rel="/glossary/m/mature?hover=true">mature</a> <a class="link_glossary" href="https://stackoverflow.com/glossary/a/aquarium" rel="/glossary/a/aquarium?hover=true">aquarium</a> it is feasible that ***all numbers of <a class="link_glossary" href="https://stackoverflow.com/glossary/f/fry" rel="/glossary/f/fry?hover=true">fry</a> may start to appear without human intervention.rnrnHowever if you want to increase the yield of <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> as a starting point. The *** group can still be conditioned together but one or more ***all, say 18" x 10" x 10"/45cm x 25cm x 25cm/29.5 <a class="link_glossary" href="https://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="https://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 ***all enough so that the ***s cannot reach them. The widely available plastic ''grass''-<a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/n/neutral" rel="/glossary/n/neutral?hover=true">neutral</a> <a class="link_glossary" href="https://stackoverflow.com/glossary/p/pH" rel="/glossary/p/pH?hover=true">pH</a>, <a class="link_glossary" href="https://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 ***all air-powered <a class="link_glossary" href="https://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.rnrnWhen the *** fish are well-conditioned and the females appear full of eggs a single <a class="link_glossary" href="https://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="https://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="https://stackoverflow.com/glossary/s/spawning" rel="/glossary/s/spawning?hover=true">spawning</a> rehabilitation in a <a class="link_glossary" href="https://stackoverflow.com/glossary/t/tank" rel="/glossary/t/tank?hover=true">tank</a> that does not contain any males.rnrnThe ***s 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="https://stackoverflow.com/glossary/A/Artemia" rel="/glossary/A/Artemia?hover=true">Artemia</a></em> <a class="link_glossary" href="https://stackoverflow.com/glossary/n/nauplii" rel="/glossary/n/nauplii?hover=true">nauplii</a> and/or <a class="link_glossary" href="https://stackoverflow.com/glossary/m/microworm" rel="/glossary/m/microworm?hover=true">microworm</a> once the <a class="link_glossary" href="https://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="https://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="https://stackoverflow.com/glossary/b/barb" rel="/glossary/b/barb?hover=true">barb</a>.rnrnThe <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> of ***all cyprinid. Most experts agree that a full <a class="link_glossary" href="https://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="https://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="https://stackoverflow.com/glossary/g/genera" rel="/glossary/g/genera?hover=true">genera</a>. When describing the <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/m/maxillary" rel="/glossary/m/maxillary?hover=true">maxillary</a> only or <a class="link_glossary" href="https://stackoverflow.com/glossary/r/rostral" rel="/glossary/r/rostral?hover=true">rostral</a> and <a class="link_glossary" href="https://stackoverflow.com/glossary/m/maxillary" rel="/glossary/m/maxillary?hover=true">maxillary</a> barbels; <a class="link_glossary" href="https://stackoverflow.com/glossary/d/dorsal" rel="/glossary/d/dorsal?hover=true">dorsal</a> <a class="link_glossary" href="https://stackoverflow.com/glossary/f/fin" rel="/glossary/f/fin?hover=true">fin</a> with last <a class="link_glossary" href="https://stackoverflow.com/glossary/s/simple%20ray" rel="/glossary/s/simple%20ray?hover=true">simple ray</a> <a class="link_glossary" href="https://stackoverflow.com/glossary/s/serrate" rel="/glossary/s/serrate?hover=true">serrate</a> or entire, <a class="link_glossary" href="https://stackoverflow.com/glossary/b/branched%20rays" rel="/glossary/b/branched%20rays?hover=true">branched rays</a> usually 8; *** <a class="link_glossary" href="https://stackoverflow.com/glossary/f/fin" rel="/glossary/f/fin?hover=true">fin</a> with last <a class="link_glossary" href="https://stackoverflow.com/glossary/s/simple%20ray" rel="/glossary/s/simple%20ray?hover=true">simple ray</a> entire, <a class="link_glossary" href="https://stackoverflow.com/glossary/b/branched%20rays" rel="/glossary/b/branched%20rays?hover=true">branched rays</a> usually 5; <a class="link_glossary" href="https://stackoverflow.com/glossary/l/lateral%20line" rel="/glossary/l/lateral%20line?hover=true">lateral line</a> complete or incomplete, <a class="link_glossary" href="https://stackoverflow.com/glossary/l/lateral" rel="/glossary/l/lateral?hover=true">lateral</a>-line scales 17-36 in row; <a class="link_glossary" href="https://stackoverflow.com/glossary/c/cephalic" rel="/glossary/c/cephalic?hover=true">cephalic</a> <a class="link_glossary" href="https://stackoverflow.com/glossary/c/cutaneous" rel="/glossary/c/cutaneous?hover=true">cutaneous</a> <a class="link_glossary" href="https://stackoverflow.com/glossary/p/papillae" rel="/glossary/p/papillae?hover=true">papillae</a> minute or absent; <a class="link_glossary" href="https://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="https://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> currently in the <a class="link_glossary" href="https://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.rnrnThe other main source of confusion with <em>Puntius</em> is that some authors do not recognise all the member <a class="link_glossary" href="https://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="https://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="https://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="https://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="https://stackoverflow.com/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> are (according to Rainboth) a <a class="link_glossary" href="https://stackoverflow.com/glossary/s/serrated" rel="/glossary/s/serrated?hover=true">serrated</a> (vs. ***ooth in <em>Puntius</em>) <a class="link_glossary" href="https://stackoverflow.com/glossary/d/dorsal" rel="/glossary/d/dorsal?hover=true">dorsal</a> <a class="link_glossary" href="https://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="https://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="https://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 'Maharaja' or 'Khavli' barb.rnrnThe genus Puntius is currently viewed as something of a catch-all for well over 100 species of ***all 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&p=2288', 0, 'species', '', 0);

如您所见,物种概况的内容非常冗长。 希望这也能向您展示我想用来获取弹出窗口的链接类型:

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

我的问题是:我目前正在运行的过滤器,其详细信息可以在第一个链接的帖子中找到,或者直接在此处查看我的filter.php文件,但效率不足以处理这么多数据库字段和这么多信息

当我第一次开始使用我们新的 WordPress 驱动的 CMS 时,过滤器确实有效,因为我在导入数据时在本地 WAMP 安装上运行它。 浏览所有数据花了将近 40 分钟。


我的问题是:考虑到数据量和数据库字段数,如何创建高效的内容过滤器

解决方案

数据库结构

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 存储 wp_glossary 和 wp_postmeta 之间的关系。 以下是 wp_postmeta 条目的示例:

维护
水箱应种植好,同时使用漂浮植物。 由于该物种白天喜欢躲藏,因此应提供大量藏身之处。 Bogwood 、岩洞和 PVC 管道都适用于此目的。 沙子应该用作基质,因为刺鳗经常喜欢埋葬自己。 较暗的灯光会鼓励鱼更频繁地从藏身之处冒险。 由于鳗鱼可以穿过最小的缝隙,因此需要一个紧密贴合的头罩。 水流应该相当温和,因为鱼主要栖息在野外静水区。

以下是 wp_glossary 条目的示例

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

以下是 wp_relation 如何保存词汇表和 postmeta 关系的示例。 假设上面的 postmeta 的 id 是 405

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

输出配置文件

一旦您可以维护上述数据库结构,您就可以通过在 wp_relation 中搜索 wp_postmeta 条目的 id 轻松地为每个 wp_postmeta 构建词汇表链接。 然后,使用str_replace填充指向您内容的链接。

为了提高性能,您可以将结果内容缓存在 HTML 中。 将缓存过期时间设置为 1 或 2 天(取决于您更新词汇表和站点流量的频率)。 您可以使用memcachedfiledatabase来存储您的缓存。


维护数据库结构

最困难的任务是维护我们的数据库关系。 有两个主要操作可以改变数据库关系。

更改词汇表

  • 添加新词汇表:搜索 wp_postmeta 并构建关系。
  • 删除词汇表:删除此词汇表与其他 wp_postmeta 之间的所有关系
  • 编辑词汇表:它是删除词汇表和添加新词汇表的组合。

改变 Postmeta

  • 添加/编辑 Postmeta :重建词汇表与其内容之间的关系。 下面是可用于构建关系的算法。 我相信还有其他更好的方法可以做到这一点。 代码不完整(我还没有测试过),但足以让你了解算法。
    // 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 ***allest 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 :删除此 postmeta 和词汇表之间的关系。

额外福利

假设您要查找使用词汇表“bogwood”的物种概况。 您可以通过 wp_relation 轻松跟踪它。


问题

1 . 首先,str_replace 将如何影响我的物种配置文件,其中包含现有代码,即 href 或 img 代码?

如果没有a link词汇表和物种名称a link ,它不会影响您的物种概况。

2 . 其次,您提到了词汇表条目,但没有提到稍微复杂的物种属/种名称。 我会为这些使用单独的表格,还是将它们全部合并为一个?

您可以使用单独的表来存储物种名称和 postmeta 之间的关系,或者您可以简单地将物种名称视为具有特殊标志的词汇表术语(需要更改词汇表的结构方式)

3 . 然后我将如何指定词汇表条目和物种概况之间的差异(a 标签中的不同类别)?

回答取决于您对第二个问题使用的方法。

这是另一个想法,在客户端上做标记。

将分类法​​提取为文本文件并缓存“转换术语”。

guppie
salmon

当读者阅读页面并重写 url 时,让 JS 通过它们;

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

自从我曾经在这里进行过一次旧讨论以来,网络上肯定有更多关于这种方法的信息。

我还偶然发现了可能与您的案例相关的WP 自定义分类法。

你考虑过三元搜索树吗?

这是我在面对“在文本质量 y 中找到 x 个单词”的问题时喜欢的数据结构。

构建的示例树(鳍、过滤器、尾部、gal、gaudy):

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

* = end node

该算法将遵循以下原则:

  • 在根节点开始匹配的单词。
  • 只要当前位置匹配就向下移动。
  • 如果当前位置 < 节点。 向左移动。
  • 如果当前位置 > 节点。 向右移。
  • 如果单词完成并且节点是结束节点。 找到的话。
  • 如果无法向左/向右移动或单词以非结束节点结尾。 找不到字。

这是一个很好的例子。

优点是可以预先计算树并以某种序列化形式存储起来。 通常甚至可以构建或传输预先构建的树到客户端并在浏览器中进行匹配。