簡體   English   中英

Solr模式問題

[英]Solr schema questions

剛剛編譯了一些有關架構的基本Solr問題。

我的情況:以前有一個solr的多核實例,每個核包含一個不同的文檔結構。 盡管一個核心文檔中的信息與其他不同核心文檔中的信息有關,但是特定的法律約束迫使我們將這些數據分類為獨立實例。 因此,每次發出對solr實例的請求時,都會查詢幾個內核,並且客戶端應用程序會“合並”並構造幾個單獨內核的響應。 為了舉例說明:假設我們是一個音樂商店,聽起來很愚蠢,我們有一個CD核心,一個DVD核心,一個磁帶核心等,每個都有自己的不同模式; 然后,當員工檢查庫存時,所有這些核心都將其響應返回給員工計算機中的應用程序,以讀取,處理不同的結構並將結果顯示為一個統一的列表。

好吧,法律限制已經解除,我們現在將核心合並在一起,到目前為止,在很大程度上依賴dynamicFields來實現模式靈活性。 但是,這帶來了很多新的挑戰,也帶來了一些疑問:

1-更好:將具有大量字段的文檔數量減少(我們正在談論數百個,有時在這里或那里約一千個,全部建立索引),或者將信息分散在幾個較小的文檔中? 從我從理論上一直閱讀的觀點來看,第一種方法是可取的,但是我不認為任何一種情況都考慮到了如此多的領域。

2-是否可以執行任何類型的關系搜索? 我的意思是擁有以下文檔:

     <doc>
        <ID>ALB@1234</ID>
        <artist_t>Metallica</artist>
        <album_t>Saint Anger</album>        
      </doc>

      <doc>
        <ID>PROD@12</ID>
        <AlbID>ALB@1234</AlbID>
        <format_t>CD</format_t>
        <price_m>8.99</price_m>     
      </doc>

      <doc>
        <ID>PROD@13</ID>
        <AlbID>ALB@1234</AlbID>         
        <format_t>MP3</format_t>
        <price_m>3.99</price_m>     
      </doc>

然后在搜索Metallica時是否已檢索全部三個文檔? 請記住,將第一個文檔中的最后兩個文檔的信息存儲為多值的方法並不是真正的選擇,因為據我所知,沒有辦法通過與范圍搜索匹配的正確格式來檢索價錢。

3-或者,是否可以像多級文檔一樣將某種子文檔結構定義為文檔的一部分? 同樣,在這里我不是指多值或多值字段,因為據我所知,它們不適用於更復雜和結構化的信息。 正在考慮以下方面的內容:

    <doc>
        <ID>ALB@1234</ID>
        <artist_t>Metallica</artist>
        <album_t>Saint Anger</album>        
        <formats>
            <format_x><ID>PROD@13</ID><AlbID>ALB@1234</AlbID><format_t>MP3</format_t><price_m>3.99</price_m></format_x>     
            <format_x><ID>PROD@12</ID><AlbID>ALB@1234</AlbID><format_t>CD</format_t><price_m>8.99</price_m></format_x>      
        </formats>          
      </doc>

4-注意事項:當然,可以通過對2)中所述的模式進行建模並對服務器執行多個查詢來解決這種情況,但這並不是最理想的解決方案。

期待任何評論或建議。 撲打不太受歡迎,但仍然可以接受,請放輕松。 ;)很抱歉,如果這些問題聽起來很愚蠢,但確實需要一些幫助。

這實際上取決於您要如何構造數據以及如何對數據進行搜索。
文檔上的字段數沒有限制。
如果您可以規范化同一文檔中的數據,則將幫助您一次檢索該文檔和所有相關詳細信息。

對於關系搜索,Solr引入了一個功能Solr Join ,它將幫助您連接文檔。
但是,這僅在Solr Trunk中可用。 因此,除非您可以使用Solr Trunk構建,否則這不是您的選擇。

Solr沒有子文檔結構。 但是,您可以嘗試使用多值字段來映射內容。 甚至使用定界的值。

<album>
    <cd_id>
        <str>cd_1</str>
        <str>cd_2</str>
    </cd_id>
    <cd_price>
        <str>cd_1_price</str>
        <str>cd_2_price</str>
    </cd_price>
</album>

應該保持多值字段的順序(因此您可以將cd_1映射到cd_1_price的位置為1),並且應該能夠在客戶端重新創建數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM