99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Solr修改架構(gòu)

2018-11-13 14:23 更新
POST /collection/schema

Solr 如果要添加、刪除或替換字段、動態(tài)字段規(guī)則、復(fù)制字段規(guī)則或新字段類型,可以將 POST 請求發(fā)送到 /collection/schema/ 端點,并使用一系列命令以執(zhí)行請求的操作。支持以下命令:

  • add-field:用你提供的參數(shù)添加一個新的字段。
  • delete-field:刪除一個字段。
  • replace-field:用一個不同的配置替換現(xiàn)有的字段。
  • add-dynamic-field:使用您提供的參數(shù)添加新的動態(tài)字段規(guī)則。
  • delete-dynamic-field:刪除一個動態(tài)的字段規(guī)則。
  • replace-dynamic-field:用一個配置不同的現(xiàn)有動態(tài)字段規(guī)則替換。
  • add-field-type:用你提供的參數(shù)添加一個新的字段類型。
  • delete-field-type:刪除一個字段類型。
  • replace-field-type:用不同的配置替換現(xiàn)有的字段類型。
  • add-copy-field:添加一個新的復(fù)制字段規(guī)則。
  • delete-copy-field:刪除復(fù)制字段規(guī)則。

這些命令可以在不同的 POST 請求或相同的 POST 請求中發(fā)出。命令按照指定的順序執(zhí)行。

在每種情況下,響應(yīng)將包括處理請求的狀態(tài)和時間,但不包括整個架構(gòu)。

在使用 API?? 修改架構(gòu)時,將自動發(fā)生核心重新加載,以便隨后對其索引的文檔立即進行更改。以前索引的文檔不會自動處理 - 如果他們使用了您更改的架構(gòu)元素,則必須重新編制索引。

添加一個新的字段

該 add-field 命令將新的字段定義添加到您的架構(gòu)中。如果同名的字段存在,則會引發(fā)錯誤。

當使用手動 schema.xml 編輯定義字段時可用的所有屬性都可以通過 API 傳遞。這些請求屬性在“ 定義字段 ”一節(jié)中詳細介紹。

例如,要定義一個名為 “sell-by”,類型為 “pdate” 的新存儲字段,您可以發(fā)送以下請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":{
     "name":"sell-by",
     "type":"pdate",
     "stored":true }
}' http://localhost:8983/solr/gettingstarted/schema

刪除一個字段

該 delete-field 命令從架構(gòu)中刪除字段定義。如果該字段在架構(gòu)中不存在,或者該字段是復(fù)制字段規(guī)則的源或目標,則會引發(fā)錯誤。

例如,要刪除名為 “sell-by” 的字段,可以發(fā)送以下請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-field" : { "name":"sell-by" }
}' http://localhost:8983/solr/gettingstarted/schema

替換一個字段

該 replace-field 命令替換字段的定義。請注意,您必須提供字段的完整定義 - 此命令不會部分修改字段的定義。如果該架構(gòu)中不存在該字段,則會引發(fā)錯誤。

使用手動 schema.xml 編輯定義字段時可用的所有屬性都可以通過 API 傳遞。這些請求屬性在“ 定義字段 ”一節(jié)中詳細介紹。

例如,要替換現(xiàn)有字段 “sell-by” 的定義,使其為 “date” 類型而不被存儲,則會發(fā)送以下請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field":{
     "name":"sell-by",
     "type":"date",
     "stored":false }
}' http://localhost:8983/solr/gettingstarted/schema

添加動態(tài)字段規(guī)則

該 add-dynamic-field 命令將新的動態(tài)字段規(guī)則添加到您的架構(gòu)中。

當使用 schema.xml 編輯時的所有可用的屬性都可以通過 POST 請求傳遞。“ 動態(tài)字段 ”部分詳細介紹了可以為動態(tài)字段規(guī)則定義的所有屬性。

例如,要創(chuàng)建一個新的動態(tài)字段規(guī)則,其中所有以“_s”結(jié)尾的傳入字段將被存儲并且具有字段類型“string”,您可以像這樣發(fā)送請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-dynamic-field":{
     "name":"*_s",
     "type":"string",
     "stored":true }
}' http://localhost:8983/solr/gettingstarted/schema

刪除動態(tài)字段規(guī)則

該 delete-dynamic-field 命令從架構(gòu)中刪除一個動態(tài)的字段規(guī)則。如果架構(gòu)中不存在動態(tài)字段規(guī)則,或者架構(gòu)包含的目標或目標僅與此動態(tài)字段規(guī)則匹配的副本字段規(guī)則,則會引發(fā)錯誤。

例如,要刪除匹配“* _s”的動態(tài)字段規(guī)則,可以像這樣發(fā)布請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-dynamic-field":{ "name":"*_s" }
}' http://localhost:8983/solr/gettingstarted/schema

替換動態(tài)字段規(guī)則

該 replace-dynamic-field 命令將替換模式中的動態(tài)字段規(guī)則。請注意,您必須提供動態(tài)字段規(guī)則的完整定義 - 此命令不會部分修改動態(tài)字段規(guī)則的定義。如果模式中不存在動態(tài)字段規(guī)則,則會引發(fā)錯誤。

當使用 schema.xml 編輯時的所有可用的屬性都可以通過 POST 請求傳遞?!?nbsp;動態(tài)字段 ”部分詳細介紹了可以為動態(tài)字段規(guī)則定義的所有屬性。

例如,要將“* _s”動態(tài)字段規(guī)則的定義替換為字段類型為“text_general”且未存儲的規(guī)則,可以像這樣發(fā)布請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-dynamic-field":{
     "name":"*_s",
     "type":"text_general",
     "stored":false }
}' http://localhost:8983/solr/gettingstarted/schema

添加一個新的字段類型

該 add-field-type 命令將新的字段類型添加到您的架構(gòu)中。

schema.xml 手動編輯時可用的所有字段類型屬性都可用于 POST 請求。命令的結(jié)構(gòu)是標準字段類型定義的 JSON 映射,包括名稱、類、索引和查詢分析器定義等。有關(guān)所有可用選項的詳細信息,請參見“ Solr字段類型 ”一節(jié)。

例如,要創(chuàng)建一個名為 “myNewTxtField” 的新字段類型,可以按如下方式發(fā)布請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type" : {
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer" : {
        "charFilters":[{
           "class":"solr.PatternReplaceCharFilterFactory",
           "replacement":"$1$1",
           "pattern":"([a-zA-Z])\\\\1+" }],
        "tokenizer":{
           "class":"solr.WhitespaceTokenizerFactory" },
        "filters":[{
           "class":"solr.WordDelimiterFilterFactory",
           "preserveOriginal":"0" }]}}
}' http://localhost:8983/solr/gettingstarted/schema

注意在這個例子中,我們只定義了一個分析器部分,它將應(yīng)用于索引分析和查詢分析。如果我們想定義單獨的分析,我們將使上面的例子中的 analyzer 部分用單獨的部分 indexAnalyzer 和 queryAnalyzer 取代。正如在下面這個例子所述:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type":{
     "name":"myNewTextField",
     "class":"solr.TextField",
     "indexAnalyzer":{
        "tokenizer":{
           "class":"solr.PathHierarchyTokenizerFactory",
           "delimiter":"/" }},
     "queryAnalyzer":{
        "tokenizer":{
           "class":"solr.KeywordTokenizerFactory" }}}
}' http://localhost:8983/solr/gettingstarted/schema

刪除一個字段類型

該 delete-field-type 命令從模式中刪除字段類型。如果模式中不存在字段類型,或模式中的任何字段或動態(tài)字段規(guī)則使用字段類型,則會引發(fā)錯誤。

例如,要刪除名為 “myNewTxtField” 的字段類型,可以按如下所示進行 POST 請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-field-type":{ "name":"myNewTxtField" }
}' http://localhost:8983/solr/gettingstarted/schema

替換一個字段類型

該 replace-field-type 命令將替換模式中的字段類型。請注意,您必須提供字段類型的完整定義 - 此命令不會部分修改字段類型的定義。如果模式中不存在字段類型,則會引發(fā)錯誤。

schema.xml 手動編輯時可用的所有字段類型屬性都可用于 POST 請求。命令的結(jié)構(gòu)是標準字段類型定義的 JSON 映射,包括名稱、類、索引和查詢分析器定義等。有關(guān)所有可用選項的詳細信息,請參見“ Solr字段類型 ”一節(jié)。

例如,要替換名為“myNewTxtField”的字段類型的定義,可以按如下方式創(chuàng)建POST請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field-type":{
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer":{
        "tokenizer":{
           "class":"solr.StandardTokenizerFactory" }}}
}' http://localhost:8983/solr/gettingstarted/schema

添加新的復(fù)制字段規(guī)則

該 add-copy-field 命令將新的復(fù)制字段規(guī)則添加到您的架構(gòu)中。

該命令所支持的屬性與在創(chuàng)建復(fù)制字段規(guī)則時通過手動編輯 schema.xml 相同,如下所示:

source

源字段。該參數(shù)是必需的。

dest

源字段將被復(fù)制到的字段或字段數(shù)組。該參數(shù)是必需的。

maxChars

要復(fù)制的字符數(shù)的上限。復(fù)制字段部分有更多的細節(jié)。

例如,要定義將字段 “shelf” 復(fù)制到 “l(fā)ocation” 和 “catchall” 字段的規(guī)則,可以發(fā)送以下請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-copy-field":{
     "source":"shelf",
     "dest":[ "location", "catchall" ]}
}' http://localhost:8983/solr/gettingstarted/schema

刪除復(fù)制字段規(guī)則

該 delete-copy-field 命令從模式中刪除復(fù)制字段規(guī)則。如果模式中不存在復(fù)制字段規(guī)則,則會引發(fā)錯誤。

該命令要求 source 和 dest 屬性。

例如, 要刪除一條將字段 "shelf" 復(fù)制到 "location" 字段的規(guī)則,您可以發(fā)布以下請求:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-copy-field":{ "source":"shelf", "dest":"location" }
}' http://localhost:8983/solr/gettingstarted/schema

單個 POST 中的多個命令

可以在單個命令中執(zhí)行一個或多個添加請求。API 是事務(wù)性的,單個調(diào)用中的所有命令要么一起成功,要么一起失敗。

這些命令按照指定的順序執(zhí)行。這意味著如果你想創(chuàng)建一個新的字段類型并且在同一請求中使用新字段的字段類型,那么創(chuàng)建字段類型的請求部分必須位于創(chuàng)建新字段的部分之前。類似地,由于字段必須存在才能用于復(fù)制字段規(guī)則,因此添加字段的請求必須出現(xiàn)在請求字段用作復(fù)制字段規(guī)則的源或目標之前。

進行多個請求的語法支持多種方法。首先,命令可以簡單地按順序進行,就像在這個請求中創(chuàng)建一個新的字段類型,然后是一個使用該類型的字段:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type":{
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer":{
        "charFilters":[{
           "class":"solr.PatternReplaceCharFilterFactory",
           "replacement":"$1$1",
           "pattern":"([a-zA-Z])\\\\1+" }],
        "tokenizer":{
           "class":"solr.WhitespaceTokenizerFactory" },
        "filters":[{
           "class":"solr.WordDelimiterFilterFactory",
           "preserveOriginal":"0" }]}},
   "add-field" : {
      "name":"sell-by",
      "type":"myNewTxtField",
      "stored":true }
}' http://localhost:8983/solr/gettingstarted/schema

或者,可以重復(fù)相同的命令,如下例所示:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":{
     "name":"shelf",
     "type":"myNewTxtField",
     "stored":true },
  "add-field":{
     "name":"location",
     "type":"myNewTxtField",
     "stored":true },
  "add-copy-field":{
     "source":"shelf",
      "dest":[ "location", "catchall" ]}
}' http://localhost:8983/solr/gettingstarted/schema

最后,重復(fù)的命令可以作為數(shù)組發(fā)送:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":[
     { "name":"shelf",
       "type":"myNewTxtField",
       "stored":true },
     { "name":"location",
       "type":"myNewTxtField",
       "stored":true }]
}' http://localhost:8983/solr/gettingstarted/schema

副本之間的架構(gòu)變化

在 SolrCloud 模式下運行時,對一個節(jié)點上的架構(gòu)所做的更改將傳播到集合中的所有副本。

您可以將 updateTimeoutSecs 參數(shù)與您的請求一起傳遞,以設(shè)置等待的秒數(shù),直到所有副本確認它們應(yīng)用了架構(gòu)更新。這有助于您的客戶端應(yīng)用程序更加健壯,因為您可以確保所有副本在指定的時間內(nèi)都有給定的架構(gòu)更改。

如果在指定時間內(nèi)沒有達成所有副本的協(xié)議,則請求將失敗,并且錯誤消息將包含有關(guān)哪些副本有問題的信息。在大多數(shù)情況下,唯一的選擇是在等待一段時間后重新嘗試更改。如果問題仍然存在,那么您可能需要調(diào)查在應(yīng)用更改時遇到問題的副本上的服務(wù)器日志。

如果您沒有提供 updateTimeoutSecs 參數(shù),則默認行為是在將更新持久化到 ZooKeeper 之后,接收節(jié)點立即返回。所有其他副本將異步應(yīng)用更新。因此,如果不提供超時,則客戶端應(yīng)用程序無法確定所有副本都應(yīng)用了更改。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號