2014-10-22 113 views
0

我們有一些書籍存儲爲XML文件。每個大小約爲20 Mb。他們都有相同的規則結構,大致如此:如何索引XML書籍?

<book> 
<volume id="vI"><title>PRIMARY CARE MEDICINE</title> 
    <part id="vIpA"><title>General Issues and Approach to Disease in Primary Care Medicine</title> 
     <section id="vIpAs1"><title>Core Issues and Special Groups in Primary Care</title> 
      <chapter id="vIpAs1ca"><title>Core Issues in Primary Care</title> 
       <subchapter id="vIpAs1casc1"><title>Introduction</title> 
        <para>Praesent et venenatis ipsum.</para> 
        … 
       </subchapter> 
      </chapter> 
      <chapter id="vIpAs1cb"><title>Other Issues</title> 
       <para>Etiam maximus orci orci, eu aliquam nunc pretium id.</para> 
       … 
      </chapter> 
     </section> 
    … 
    </part> 
… 
</volume> 
</book> 

我們希望讓他們全文可以用Lucene搜索。搜索結果將顯示單詞出現的標題。

  1. 索引此類內容的適當工具是什麼?我遇到了Solr,Tika或Digester等幾個名字,但他們所做的事對我來說並不清楚。
  2. 如果我們現在想限制搜索某些元素類型(例如標題)會怎麼樣?是否適用相同的工具?

回答

0

我認爲將這些放在XML數據庫(如MarkLogic或eXist-DB)中是值得的。然後,您可以在整個集合中同時使用自由文本搜索和結構化XQuery搜索。 XML數據庫帶有工具,允許您控制構建哪些內容的哪些部分的索引。

+0

我們一直都不願意使用XML DB,因爲害怕將自己鎖定在非標準技術中,而有些人似乎脫離了簡單文件+「手工製作」索引。當內容結構化時,這看起來像一個選項,即符合單個DTD。另一方面,我明白維護索引程序和結果調整代碼可能成爲一種負擔。這是你的意思嗎?我們需要開源,所以我們將開始嘗試使用exists-db。 – 2014-10-22 16:47:18

+0

我一直在關注「簡單文件和手工索引」路線。你發現自己慢慢地寫一個自己動手的數據庫。最好將自己鎖定在一個擁有用戶社區的開源產品中,而不是放在必須維護自己的代碼中,最終依賴於一個或兩個關鍵開發人員的知識。 – 2014-10-23 08:27:27

0

要從XML文件中提取內容,您有幾個選項。例如,Java編程語言包含許多用於XML處理的庫。這些庫當然可以從Clojure,Scala或任何基於JVM的語言中使用。
第二種選擇是你提到的Apache Tika。
Apache Solr(以及ElasticSearch的核心)是Apache Lucene。如果您使用的是Apache Lucene,那麼Java API是您唯一的選擇。但是如果你想使用PHP,Python或Erlang的話呢?
簡而言之,Apache Solr(和ElasticSearch)提供的是Lucene API的HTTP接口(當然還有更多的東西)。

如果我們現在想限制搜索某些元素類型(例如標題),該怎麼辦?是否適用相同的工具?

如果我們談論的Lucene,Solr的或ElasticSearch,那麼你當然可以。