2009-04-30 48 views
1

我正在維護一個簡單的基於php的內部cms。我想搜索文章的文本,因爲它們被保存到系統中,最終會有成千上萬個不同的記號,以便自動將鏈接應用到這些記號,並且還可以在關聯表中建立關係文章和令牌所代表的實體。搜索文本(可能)成千上萬的令牌

這樣做的最好方法是什麼?每次保存文章時,是否有一種更快/更有效的方法比檢索所有令牌及其相關實體/ ID的列表?

我對置換令牌的興趣不如建立搜索令牌列表的最佳方式 - 它們來自多個不同的表格,我認爲在每個請求的基礎上,數據集這需要被查詢將是一個相當負擔的數據庫和腳本的內存負載

編輯:我想我提出了錯誤的問題。

考慮以下內容:

史蒂夫鬆餅吃了17個神話般的毛茸茸法士達在臭烘烘豆,而約翰遜Fatlumps吃32。

我有兩個人在'人'表中,一個餐廳在'餐廳'表中,一個餐廳菜單項在'restaurant_menu_item'表中。

我想知道的最佳方式,該文本被保存後,自動辦理,並確定什麼是人,什麼是一間餐廳,以及什麼是餐廳的菜單項沒有訴諸自定義標記爲目標觀衆幾乎沒有機會獲得這種權利。

+1

有趣的問題。有一件事要考慮:如果你碰撞了怎麼辦?也就是說,如果「Steve McMuffin」是一個人,而「McMuffin」是一個「餐館菜單項」呢?你想怎麼處理? – 2009-04-30 17:02:14

+0

好點。我不知道!你有什麼? – Shabbyrobe 2009-05-01 19:03:48

回答

1

除非您可以得到令牌格式的一些保證,否則這總是會很困難(無論如何是計算上的)。如果沒有標記,計算機真的不知道任何特定的字符串有任何特殊的含義,如果它不能被識別格式。

「簡單」的答案是遍歷每個標記的文本,看看它是否存在,並處理它。但是,你會遇到兩個問題:計算時間和碰撞(正如Chad在他的評論中指出的那樣)。

是否有一個非常簡單的標記可以強制執行?如果短語被[[括號]]包圍,MediaWiki只會創建內部鏈接。如果您使用CamelCaseThePhrase,許多wiki軟件只會建立鏈接。

我無法想象應用程序能夠自動識別某些字符組的含義,而無需檢查每個已定義的標記或執行某種格式。

你確定你的觀衆無法處理類似

SteveMcMuffin ate seventeen FabulousFurryFajitas at 
TheStinkingBean, while JohnsonFatlumps ate thirty-two. 

[[Steve McMuffin]] ate seventeen [[Fabulous Furry Fajitas]] at 
[[The Stinking Bean]], while [[Johnson Fatlumps]] ate thirty-two. 
0

我們有類似的情況。我們最終使用正則表達式來解析和替換令牌。由於原始文章是一個模板,我們將生成新的文章並替換標記,因此我們會緩存生成的文章,因此對模板所做的任何更改都意味着無法進行新的解析。