2015-08-03 37 views
0

我有一個帶有三個表的MySql數據庫:人員,地址和聯繫信息。人員表格是與其他兩個表格具有一對多關係的主表格。如何將加入的MySql數據轉換爲Solr索引

據我所知,在Solr中構造數據的主要問題是:我需要回答哪些問題? 我希望能夠通過地址和聯繫信息搜索人員。

我的問題是這樣的:

什麼是像這樣的例子最佳實踐,當我想和Solr的數據搜索,以及如何將一個MySQL查詢是什麼樣子? 我看到了以下解決方案:

  • 創建一個巨大的查詢,加入和一次在一個領域concatting所有信息

  • 每一個類型的信息創建不同的索引(核心?),並加入他們的行列通過主鍵

  • 從數據庫中一次一個地加入數據,在每個類型的數據行中重複使用人員主鍵(人員,人員地址和人員ID以及人員聯繫人信息)

  • 找人表中的數據,並把相關數據的嵌套文件(雖然我不知道如何應該這樣做)

回答

1

構建一個巨大的字符串將在初期還好,但對在稍後的時間點,由於巨型絃線產生的噪音,你將不得不主要切換到下面提到的選項2。

您應該準備一份SOLR文件,其中包含所有可能的字段以供人們搜索。

如地址所以某些領域應該是多值字段,這樣就可以存儲多個地址的SOLR DOC

<add> 
     <doc> 
       <field name="id">Person 1</field> 
       <field name="address">addr1</field> 
       <field name="address">addr2</field> 
     </doc> 
</add> 

一旦你有了到位的文檔,要求在所有字段進行搜索。這可以通過兩種方式

  1. 定義一個副本領域實現說,在搜索處理all_text從人的所有字段的值複製說的地址,名稱等,並以此作爲默認如下

    <requestHandler name="/query" class="solr.SearchHandler"> 
        <lst name="defaults"> 
          <str name="qf">all_text</str> 
        </lst> 
    </requestHandler> 
    
  2. 定義具有特定字段的請求處理程序缺省值。在這裏,您甚至可以實現某些字段的提升,如姓名與排名地址。

    <requestHandler name="/query" class="solr.SearchHandler"> 
        <lst name="defaults"> 
          <str name="qf">name^5 address^2</str> 
        </lst> 
    </requestHandler> 
    
1

只要找到「人」爲目標,你要索引每個人在Solr的單獨的索引(在一個單一的指標)。你不想在內核之間「加入」(因爲Solr實際上沒有加入支持,除了一些在可伸縮性方面相當有限的特性 - 而且它們與你認爲加入RDBMS意義)。

創建一個DataImportHandler configuration,通過檢索所有人,然後爲每個地址和電話號碼添加多值字段,從而做到您想要的。您可以通過將表連接在一起並使用GROUP_CONCAT在配置中的splitting them之前的單個字段中獲取多個值,或者僅使用具有體面緩存的子實體(這將需要更多的查詢,因爲每個子實體將被單獨的查詢)。取決於工作量,兩者將以不同的方式工作。

如果您爲多個位置加入的大量數據建立索引,則可能需要創建一個小型腳本,用於從MySQL服務器中爲每行添加流,然後爲每行添加一個文檔到Solr,以便您進一步優化過程。

+0

謝謝你的回答!假設我希望能夠搜索道路名稱和道路號碼,即Capital Street 133.我應該將這兩個信息放在一個或多個一個多值域中嗎? – StumpDK

相關問題