SolrConfig中的RequestDispatcher

2018-12-11 15:47 更新

solrconfig.xml的requestDispatcher元素,控制了Solr HTTP RequestDispatcher實現(xiàn)對請求的響應(yīng)方式。

其中包括用于定義是否應(yīng)該處理/select的url的參數(shù)(對于Solr 1.1兼容性),如果它支持遠(yuǎn)程流,文件上傳的最大大小以及它將如何響應(yīng)HTTP緩存頭的請求。

handleSelect元素

注意:handleSelect 是為了傳統(tǒng)的后向兼容性;那些新來的Solr不需要改變默認(rèn)配置的方式

第一個可配置項是< requestDispatcher >元素本身的handleSelect當(dāng)選屬性。該屬性可以設(shè)置為“true”或“false”兩個值之一。它管理Solr如何響應(yīng)請求,如:/select?qt=XXX。如果requestHandler沒有顯式注冊/select名稱,默認(rèn)值“false”將忽略請求/select。值“true”將查詢請求路由到定義為qt值的解析器。

在Solr的最新版本中,/selectrequestHandler是默認(rèn)定義的,因此值“false”將正常工作。有關(guān)更多信息,請參閱SolrConfig中的RequestHandlers和SearchComponents部分。

<requestDispatcher handleSelect="true" >
  ...
</requestDispatcher>

requestParsers元素

該<requestParsers>子元素控制與解析請求的相關(guān)值。這是一個空的XML元素,沒有任何內(nèi)容,只有屬性。

該屬性enableRemoteStreaming控制是否允許遠(yuǎn)程傳輸內(nèi)容。如果省略或設(shè)置為false(默認(rèn)),則不允許流式傳輸。將其設(shè)置為true允許您指定要使用stream.file和stream.url參數(shù)進行流式傳輸?shù)膬?nèi)容或位置。

如果啟用遠(yuǎn)程流式傳輸,請確保您已啟用身份驗證。否則,有人可能通過訪問任意的URL訪問您的內(nèi)容。將Solr放置在防火墻后面以防止從不可信的客戶端訪問Solr也是一個好主意。

該屬性multipartUploadLimitInKB以可以在多部分HTTP POST請求中提交的文檔的大小為單位設(shè)置以千字節(jié)為單位的上限。指定的值乘以1024來確定以字節(jié)為單位的大小。-1意味著MAX_INT 的值,如果省略,它也是系統(tǒng)默認(rèn)值。

該屬性formdataUploadLimitInKB在HTTP POST請求中提交的表單數(shù)據(jù)(application / x-www-form-urlencoded)的大小上設(shè)置了一個限制(千字節(jié)),可用于傳遞不適合URL的請求參數(shù)。-1意味著MAX_INT 的值,如果省略,也是系統(tǒng)默認(rèn)值。

該屬性addHttpRequestToContext可以用來指示原始HttpServletRequest對象應(yīng)該包含在SolrQueryRequest使用httpRequest鍵的上下文映射。HttpServletRequest不是任何Solr組件所使用的,但在開發(fā)自定義插件時可能會有用。

<requestParsers enableRemoteStreaming="false"
                multipartUploadLimitInKB="2048"
                formdataUploadLimitInKB="2048"
                addHttpRequestToContext="false" />

以下命令是如何通過Config API啟用RemoteStreaming和BodyStreaming的示例:

curl http://localhost:8983/solr/gettingstarted/config -H 'Content-type:application/json' -d'{
    "set-property" : {"requestDispatcher.requestParsers.enableRemoteStreaming":true},
    "set-property" : {"requestDispatcher.requestParsers.enableStreamBody":true}
}'

httpCaching元素

該<httpCaching>元素控制HTTP緩存控制標(biāo)頭。不要將這些設(shè)置與Solr的內(nèi)部緩存配置混淆。該元素控制由W3C HTTP規(guī)范定義的HTTP響應(yīng)的緩存。

這個元素允許三個屬性和一個子元素。<httpCaching>元素的屬性控制是否允許對GET請求的304響應(yīng),如果是,則應(yīng)該是什么類型的響應(yīng)。當(dāng)一個HTTP客戶端應(yīng)用程序發(fā)出一個GET時,它可以選擇性地指定一個304響應(yīng)是可接受的,如果該資源從上次被提取以來沒有被修改過。

  • never304

    如果存在值true,則GET請求將永遠(yuǎn)不會響應(yīng)304代碼,即使請求的資源未被修改。當(dāng)此屬性設(shè)置為true時,接下來的兩個屬性將被忽略。將其設(shè)置為true對于開發(fā)是非常方便的,因為當(dāng)通過Web瀏覽器或其他支持緩存頭的客戶端修改Solr響應(yīng)時,304響應(yīng)可能會造成混淆。

  • lastModFrom

    該屬性可以設(shè)置為openTime(默認(rèn))或dirLastMod。該值openTime表示與由客戶端發(fā)送的If-Modified-Since報頭相比,最后修改時間應(yīng)該相對于搜索器開始的時間來計算。使用dirLastMod,如果您想要時間精確地對應(yīng)于磁盤上最后更新的索引。

  • etagSeed

    這個屬性的值作為ETag頭的值發(fā)送。即使索引沒有改變,更改此值也可能有助于強制客戶重新獲取內(nèi)容 - 例如,當(dāng)您對配置進行了一些更改時。

    <httpCaching never304="false"
                 lastModFrom="openTime"
                 etagSeed="Solr">
      <cacheControl>max-age=30, public</cacheControl>
    </httpCaching>

cacheControl元素

除了這些屬性之外,<httpCaching>接受一個子元素:<cacheControl>。這個元素的內(nèi)容將作為HTTP響應(yīng)的Cache-Control頭的值發(fā)送。此標(biāo)頭用于修改請求客戶端的默認(rèn)緩存行為。Cache-Control頭的可能值由第14.9節(jié)中的HTTP 1.1規(guī)范定義。

設(shè)置max-age字段控制客戶端在從服務(wù)器再次請求之前可以重新使用緩存響應(yīng)的時間。此時間間隔應(yīng)根據(jù)您更新索引的頻率以及您的應(yīng)用程序是否可接受使用已過時的內(nèi)容來設(shè)置。設(shè)置must-revalidate將告訴客戶端在服務(wù)器上重新使用之前確認(rèn)其緩存副本仍然正常。這將確保使用最及時的結(jié)果,同時避免在不需要的情況下再次獲取內(nèi)容,則請求服務(wù)器進行檢查。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號