Подтвердить что ты не робот

Какой самый эффективный способ написать сложный контент-фильтр?

Недавно я спросил довольно длинный вопрос относительно фильтра содержимого для моего сайта. Сообщение можно найти здесь, пожалуйста, не стесняйтесь читать в свободное время.

Я принял @DampeS8N ответ, потому что он ответил хорошо и отправил меня в правильном направлении.

К сожалению, результат этого вопроса заключался в том, что фильтр содержимого, который я использую, просто слишком неэффективен для работы в контексте моего приложения.

Здесь информация:

  • У меня есть ~ 2000 + термины глоссария * и ~ 1200 + виды видов **
  • Заголовки (глоссарий) или научные имена (профили видов) этих сообщений составляют условия поиска для фильтра
  • Я хотел бы отфильтровать содержимое моих профилей видов (желательно после сохранения, но это можно сделать с помощью задания cron) для поиска вышеуказанных условий поиска и замены их ссылками на соответствующие записи глоссария или профили видов

* Здесь можно найти слова глоссария здесь.

Пример списка записей глоссария может быть caudal fin, dorsal, filter и т.д.

** Профиль вида можно найти здесь.

Примерный список видов может быть Apistogramma panduro, A. panduro, Dario dario, D. dario, Betta sp. 'Maha Chai' и т.д.

Здесь проблема:

  • My CMS управляется WordPress. Это не имеет особого отношения к этому сообщению, кроме как для понимания структуры моих профилей видов.
  • Мои профили видов состоят из некоторой базовой информации, хранящейся в таблице wp_posts, а затем дополнительной информации, хранящейся в таблице wp_postmeta.
  • Большая часть информации в моих профилях видов хранится в количестве meta fields, которые являются записями в таблице wp_postmeta. Это можно увидеть ниже.

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

wp_postmeta​​STRONG >

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="/glossary/e/endemic" rel="/glossary/e/endemic?hover=true">Endemic</a> to streams of the Yenna <a class="link_glossary" href="/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="/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="/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="/glossary/s/sand" rel="/glossary/s/sand?hover=true">sand</a> or <a class="link_glossary" href="/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="/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> it is likely to congregate in <a class="link_glossary" href="/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="/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> and a <a class="link_glossary" href="/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="/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="/glossary/r/river" rel="/glossary/r/river?hover=true">river</a> with a <a class="link_glossary" href="/glossary/s/substrate" rel="/glossary/s/substrate?hover=true">substrate</a> of variably-sized rocks and <a class="link_glossary" href="/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="/glossary/t/tank" rel="/glossary/t/tank?hover=true">tank</a> can be further furnished with driftwood branches and <a class="link_glossary" href="/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="/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="/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="/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="/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="/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="/glossary/a/algae" rel="/glossary/a/algae?hover=true">algae</a> and other <a class="link_glossary" href="/glossary/z/zooplankton" rel="/glossary/z/zooplankton?hover=true">zooplankton</a> in nature. In the <a class="link_glossary" href="/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="/glossary/D/Daphnia" rel="/glossary/D/Daphnia?hover=true">Daphnia</a></em>, <em><a class="link_glossary" href="/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="/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="/glossary/b/biotope" rel="/glossary/b/biotope?hover=true">biotope</a>-style <a class="link_glossary" href="/glossary/c/community" rel="/glossary/c/community?hover=true">community</a> based around <a class="link_glossary" href="/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="/species/puntius-filamentosus" rel="/species/puntius-filamentosus/?hover=true">Puntius filamentosus</a></em>, <em><a class="link_species" href="/species/puntius-fasciatus" rel="/species/puntius-fasciatus/?hover=true">P. fasciatus</a></em>, <em><a class="link_species" href="/species/puntius-narayani" rel="/species/puntius-narayani/?hover=true">P. narayani</a></em>, <em><a class="link_species" href="/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="/speciesario-aequipinnatus" rel="/speciesario-aequipinnatus/?hover=true">Devario aequipinnatus</a></em>, <em><a class="link_species" href="/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="/species/mesonoemacheilus-guentheri" rel="/species/mesonoemacheilus-guentheri/?hover=true">M. guentheri</a></em> among the numerous suitable <a class="link_glossary" href="/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> available in the trade at times.\r\n\r\nIt' a shoaling <a class="link_glossary" href="/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="/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="/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="/glossary/s/snout" rel="/glossary/s/snout?hover=true">snout</a> and head in sexually <a class="link_glossary" href="/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="/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> is an <a class="link_glossary" href="/glossary/e/egg" rel="/glossary/e/egg?hover=true">egg</a>-scattering, continuous spawner that exhibits no <a class="link_glossary" href="/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="/glossary/s/spawn" rel="/glossary/s/spawn?hover=true">spawn</a> often and in a well-furnished, <a class="link_glossary" href="/glossary/m/mature" rel="/glossary/m/mature?hover=true">mature</a> <a class="link_glossary" href="/glossary/a/aquarium" rel="/glossary/a/aquarium?hover=true">aquarium</a> it is feasible that small numbers of <a class="link_glossary" href="/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="/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="/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="/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="/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="/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="/glossary/n/neutral" rel="/glossary/n/neutral?hover=true">neutral</a> <a class="link_glossary" href="/glossary/p/pH" rel="/glossary/p/pH?hover=true">pH</a>, <a class="link_glossary" href="/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="/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="/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="/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="/glossary/s/spawning" rel="/glossary/s/spawning?hover=true">spawning</a> rehabilitation in a <a class="link_glossary" href="/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="/glossary/A/Artemia" rel="/glossary/A/Artemia?hover=true">Artemia</a></em> <a class="link_glossary" href="/glossary/n/nauplii" rel="/glossary/n/nauplii?hover=true">nauplii</a> and/or <a class="link_glossary" href="/glossary/m/microworm" rel="/glossary/m/microworm?hover=true">microworm</a> once the <a class="link_glossary" href="/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="/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="/glossary/b/barb" rel="/glossary/b/barb?hover=true">barb</a>.\r\n\r\nThe <a class="link_glossary" href="/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="/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="/glossary/r/revision" rel="/glossary/r/revision?hover=true">revision</a> is required, with the likely outcome that many <a class="link_glossary" href="/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> will be placed into new or different <a class="link_glossary" href="/glossary/g/genera" rel="/glossary/g/genera?hover=true">genera</a>. When describing the <a class="link_glossary" href="/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="/glossary/m/maxillary" rel="/glossary/m/maxillary?hover=true">maxillary</a> only or <a class="link_glossary" href="/glossary/r/rostral" rel="/glossary/r/rostral?hover=true">rostral</a> and <a class="link_glossary" href="/glossary/m/maxillary" rel="/glossary/m/maxillary?hover=true">maxillary</a> barbels; <a class="link_glossary" href="/glossary/d/dorsal" rel="/glossary/d/dorsal?hover=true">dorsal</a> <a class="link_glossary" href="/glossary/f/fin" rel="/glossary/f/fin?hover=true">fin</a> with last <a class="link_glossary" href="/glossary/s/simple%20ray" rel="/glossary/s/simple%20ray?hover=true">simple ray</a> <a class="link_glossary" href="/glossary/s/serrate" rel="/glossary/s/serrate?hover=true">serrate</a> or entire, <a class="link_glossary" href="/glossary/b/branched%20rays" rel="/glossary/b/branched%20rays?hover=true">branched rays</a> usually 8; anal <a class="link_glossary" href="/glossary/f/fin" rel="/glossary/f/fin?hover=true">fin</a> with last <a class="link_glossary" href="/glossary/s/simple%20ray" rel="/glossary/s/simple%20ray?hover=true">simple ray</a> entire, <a class="link_glossary" href="/glossary/b/branched%20rays" rel="/glossary/b/branched%20rays?hover=true">branched rays</a> usually 5; <a class="link_glossary" href="/glossary/l/lateral%20line" rel="/glossary/l/lateral%20line?hover=true">lateral line</a> complete or incomplete, <a class="link_glossary" href="/glossary/l/lateral" rel="/glossary/l/lateral?hover=true">lateral</a>-line scales 17-36 in row; <a class="link_glossary" href="/glossary/c/cephalic" rel="/glossary/c/cephalic?hover=true">cephalic</a> <a class="link_glossary" href="/glossary/c/cutaneous" rel="/glossary/c/cutaneous?hover=true">cutaneous</a> <a class="link_glossary" href="/glossary/p/papillae" rel="/glossary/p/papillae?hover=true">papillae</a> minute or absent; <a class="link_glossary" href="/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="/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> currently in the <a class="link_glossary" href="/glossary/g/genus" rel="/glossary/g/genus?hover=true">genus</a> are <a class="link_glossary" href="/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="/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="/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="/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="/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="/glossary/s/species" rel="/glossary/s/species?hover=true">species</a> are (according to Rainboth) a <a class="link_glossary" href="/glossary/s/serrated" rel="/glossary/s/serrated?hover=true">serrated</a> (vs. smooth in <em>Puntius</em>) <a class="link_glossary" href="/glossary/d/dorsal" rel="/glossary/d/dorsal?hover=true">dorsal</a> <a class="link_glossary" href="/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="/glossary/g/gill" rel="/glossary/g/gill?hover=true">gill</a> rakers (vs. 12-20). SF tentatively lists all <a class="link_glossary" href="/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);

Как вы можете видеть, содержание профилей видов невероятно длительное. Надеюсь, это также покажет вам вид ссылки, которую я хотел бы использовать, чтобы получить всплывающие окна:

<a class="link_glossary" href="/glossary/n/native" rel="/glossary/n/native?hover=true">native</a>

Моя проблема заключается в следующем: фильтр, который я запускаю в данный момент, сведения о котором можно найти в первом связанном сообщении или непосредственно здесь для моего файла filter.php, просто недостаточно эффективен для работы с этим большим количеством полей базы данных и этой большой информации.

Фильтр работал, когда я впервые начал использовать нашу новую CMS, управляемую WordPress, поскольку я запускал ее на установке WAMP в локальном хосте, когда я импортировал данные. Чтобы просмотреть все данные, потребовалось почти 40 минут.


Мой вопрос tl; dr заключается в следующем: как я могу создать эффективный фильтр содержимого, учитывая количество данных и количество полей базы данных?

4b9b3361

Ответ 1

Структура базы данных

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:

Обслуживание
Танк должен быть хорошо посажен с плавающими растениями, также используемыми. обилие укрытий должно быть обеспечено, поскольку этот вид species любит скрыть в течение дня. Bogwood, скальные пещеры и трубы из ПВХ - все подходит для этой цели. Песок должен использоваться как субстрат в качестве колючие угри часто любят хоронить себя. Освещение диммера будет поощрять рыбу чаще рисковать из своих укрытий. требуется подходящий капюшон, так как угрь может найти свой путь через наименьший промежуток. Поток воды должен быть довольно мягким, как рыба главным образом населяет районы еще воды в дикой природе.

Ниже приведен пример записей wp_glossary

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

Ниже приведен пример того, как wp_relation поддерживает соотношение глоссария и postmeta. Предполагая, что вышеуказанный идентификатор postmeta равен 405

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

Профиль вывода

Как только вы сможете поддерживать структуру базы данных, вы можете легко создать ссылку глоссария для каждого wp_postmeta, выполнив поиск идентификатора wp_postmeta в wp_relation. Затем, используя str_replace, чтобы заполнить ссылку на ваш контент.

Чтобы повысить производительность, вы можете кэшировать результат в HTML. Установите срок действия кеша на 1 или 2 дня (в зависимости от того, как часто вы обновляете свой глоссарий и трафик вашего сайта). Вы можете использовать memcached, file или database для хранения кеша.


Поддержка структуры базы данных

Самая сложная задача - поддерживать связь с базой данных. Существует два основных действия, которые изменяют отношение базы данных.

Alter Glossary

  • Добавить новый глоссарий: Поиск по wp_postmeta и построению отношения.
  • Удалить глоссарий: Удалить все отношения между этим глоссарием и другим wp_postmeta​​li >
  • Редактирование глоссария: Это комбинация удаления глоссария и добавления нового глоссария.

Изменить постмету

  • Добавить/редактировать Postmeta​​strong > . Восстановить связь между глоссарием и его содержимым. Ниже приведен алгоритм, который можно использовать для построения отношения. Я считаю, что есть и другие способы сделать это лучше. Код не является полным (я еще не тестировал его), но вам достаточно понять алгоритм.

    // 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);
    
  • Удалить постмету: Удалить связь между этой постметкой и глоссарием.


Дополнительные преимущества

Давайте скажем, что вам нужно найти профиль вида, который использует глоссарий "болота". Вы можете легко отслеживать его через wp_relation.


Вопросы

1. Во-первых, как str_replace влияет на мои профили видов, которые имеют в них существующий код, то есть код href или img?

Это не влияет на ваши профили видов, если нет слова a link для глоссария и названия видов.

2. Во-вторых, вы упомянули записи глоссария, но не немного более сложные виды родов/видов. Использую ли я отдельную таблицу для них или включаю ее в один?

У вас может быть отдельная таблица для хранения отношений между именем вида и постмета, или вы можете просто рассматривать названия видов как термин глоссария со специальным флагом (который должен изменить структуру глоссария)

3. Как я могу указать разницу (разные классы в теге) между записями глоссария и профилями видов?

Ответ зависит от того, какой метод вы используете для своих вторых вопросов.

Ответ 2

Вот еще одна мысль, сделайте разметку на клиенте.

Извлеките таксономии в виде текстовых файлов и кешируйте "условия преобразования".

guppie
salmon

Пройдите JS через них, когда читатель читает страницу и переписывает URL-адреса;

<a href="/section/guppie">guppie</a> and a <a href="/section/salmon">salmon</a>

В этом вопросе должно быть больше информации об этом методе, так как в прошлом было мое обсуждение.

Я также наткнулся на этот вопрос на WP Custom Taxonomies, который может иметь отношение к вашему делу.

Ответ 3

Вы считаете Тройное дерево поиска?

Это структура данных, которую я предпочитаю, когда сталкиваюсь с проблемой "найти x количество слов в массе текста y".

Пример дерева построено (ребро, фильтр, каудальный, галльный, безвкусный):

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

* = end node

И алгоритм будет идти по строкам:

  • Начните слово, чтобы оно соответствовало корню node.
  • Пока текущие совпадения позиции перемещаются вниз.
  • Если текущее положение < node. Двигайтесь влево.
  • Если текущее положение > node. Двигайтесь вправо.
  • Если слово закончено, а node - конец node. Слово найдено.
  • Если перемещение влево/вправо невозможно или слово заканчивается в конце конца node. Слово не найдено.

Здесь хороший пример.

Преимущество состоит в том, что дерево может быть предварительно рассчитано и сохранено в некоторой сериализованной форме. Часто бывает даже возможно построить или перенести предварительно построенное дерево на клиент и выполнить сопоставление в браузере.