2011-08-31 16 views
2

我有我公司所有員工的名字(5000+)。我想寫一個引擎,它可以在線查找在線文章(博客/維基/幫助文檔)中的名稱,並使用用戶電子郵件的「mailto」標記標記它們。使用lucene/java標記名稱

截至目前,我打算刪除文章中的所有停用詞,然後在lucene索引中搜索每個詞。但即使在這種情況下,我也會看到很多查詢觸及索引,例如,如果有2000字的文章,只有兩個人名的引用,那麼很可能會有1000個lucene查詢。

有沒有辦法減少這些查詢?還是完全相同的其他方式? 在此先感謝

+0

我不確定我在追隨,是不是員工預先定義的名單?這些不是你的查詢的名字嗎? – amit

+0

@amit僱員名單是5000,你問我是否應該在文章中搜索每個名字? 2000個單詞文檔中有5000個查詢?我想知道其他方法。 – Sap

+0

你只有一個文件?如果你這樣做,lucene將不會幫你太多.. – amit

回答

1

http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
此算法可能對您有用。這樣做的方式是,首先將整個名稱列表編譯成一個巨型有限狀態機(這可能需要一段時間),但是一旦建立了這個狀態機,就可以通過儘可能多的文檔運行它,很有效地檢測名稱。
我認爲它只會查看每個文檔中的每個字符一次,所以它應該比標記文檔和比較每個單詞與已知名稱列表更有效。
網絡上有許多可用於不同語言的實現。一探究竟。

+0

我認爲他正試圖處理用戶的輸入,以查找標籤。似乎他沒有嘗試批量標記。 –

+0

這是有道理的。我每五秒鐘運行一次異步任務來完成標記。你的答案是有幫助的。非常感謝 – Sap

5

如果你只有5000個名字,我只要將它們粘貼到內存中的散列表中,而不是用Lucene打擾。您可以通過多種方式對它們進行散列(例如,暱稱,倒數第一或倒數第一等),並且仍然具有相對較小的內存佔用量和非常高效的性能。

+0

不,爲了簡單起見,我有更多的名字,我使用數字「5000」他們其實是更多。 – Sap

+2

好的,但是當您提出問題時,請提供足夠的信息以獲得適當的答案。通過阻止,你浪費每個人的時間。你能否描述你正試圖解決的實際問題? –

+0

我必須阻止一些信息的原因是因爲我爲一家公司工作,而且我無法就我的工作內容提供很多具體細節。就問題而言,確切的數字是99655,這個數字會隨着時間的推移而增加。假設我將它們中的每一個存儲在HashMap中,您是否建議在文章的每個單詞的hashMap中查找? – Sap

相關問題