我有我公司所有員工的名字(5000+)。我想寫一個引擎,它可以在線查找在線文章(博客/維基/幫助文檔)中的名稱,並使用用戶電子郵件的「mailto」標記標記它們。使用lucene/java標記名稱
截至目前,我打算刪除文章中的所有停用詞,然後在lucene索引中搜索每個詞。但即使在這種情況下,我也會看到很多查詢觸及索引,例如,如果有2000字的文章,只有兩個人名的引用,那麼很可能會有1000個lucene查詢。
有沒有辦法減少這些查詢?還是完全相同的其他方式? 在此先感謝
我有我公司所有員工的名字(5000+)。我想寫一個引擎,它可以在線查找在線文章(博客/維基/幫助文檔)中的名稱,並使用用戶電子郵件的「mailto」標記標記它們。使用lucene/java標記名稱
截至目前,我打算刪除文章中的所有停用詞,然後在lucene索引中搜索每個詞。但即使在這種情況下,我也會看到很多查詢觸及索引,例如,如果有2000字的文章,只有兩個人名的引用,那麼很可能會有1000個lucene查詢。
有沒有辦法減少這些查詢?還是完全相同的其他方式? 在此先感謝
http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
此算法可能對您有用。這樣做的方式是,首先將整個名稱列表編譯成一個巨型有限狀態機(這可能需要一段時間),但是一旦建立了這個狀態機,就可以通過儘可能多的文檔運行它,很有效地檢測名稱。
我認爲它只會查看每個文檔中的每個字符一次,所以它應該比標記文檔和比較每個單詞與已知名稱列表更有效。
網絡上有許多可用於不同語言的實現。一探究竟。
我認爲他正試圖處理用戶的輸入,以查找標籤。似乎他沒有嘗試批量標記。 –
這是有道理的。我每五秒鐘運行一次異步任務來完成標記。你的答案是有幫助的。非常感謝 – Sap
如果你只有5000個名字,我只要將它們粘貼到內存中的散列表中,而不是用Lucene打擾。您可以通過多種方式對它們進行散列(例如,暱稱,倒數第一或倒數第一等),並且仍然具有相對較小的內存佔用量和非常高效的性能。
我不確定我在追隨,是不是員工預先定義的名單?這些不是你的查詢的名字嗎? – amit
@amit僱員名單是5000,你問我是否應該在文章中搜索每個名字? 2000個單詞文檔中有5000個查詢?我想知道其他方法。 – Sap
你只有一個文件?如果你這樣做,lucene將不會幫你太多.. – amit