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

Solr托管資源

2018-12-15 15:00 更新

Solr托管資源公開了一個REST API端點(diǎn),用于在Solr對象上執(zhí)行Create-Read-Update-Delete(CRUD)操作。

具有配置設(shè)置或數(shù)據(jù)的任何長期存在的Solr對象都是被管理資源的好候選。托管資源是對Solr中其他可編程管理的組件的補(bǔ)充,例如用于將字段添加到托管模式的RESTful模式API。

請考慮一個基于web的用戶界面,該UI提供"Solr"服務(wù),用戶需要配置一組停用詞和同義詞映射作為其搜索應(yīng)用程序的初始設(shè)置過程的一部分。使用Solr提供的托管停止過濾器和托管的同義詞圖過濾器工廠,可以通過托管資源REST API輕松地支持此類用例。

用戶也可以編寫自己的自定義插件,利用相同的內(nèi)部鉤子來管理額外的資源REST。

本節(jié)中的所有示例都假設(shè)您正在運(yùn)行“techproducts”Solr示例:

bin/solr -e techproducts

托管資源概述

我們通過查看Solr提供的幾個示例來開始學(xué)習(xí)托管資源,以使用REST API管理停用詞和同義詞的示例。閱讀本節(jié)后,您將準(zhǔn)備好深入了解如何在Solr中實(shí)施托管資源的細(xì)節(jié),以便您可以開始構(gòu)建自己的實(shí)施。

管理停用詞

首先,您需要定義一個使用ManagedStopFilterFactory的字段類型,例如:

<fieldType name="managed_en" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ManagedStopFilterFactory" 
            managed="english" /> 
  </analyzer>
</fieldType>

關(guān)于這個字段類型的定義,有兩個重要的事情要注意:

  1. 過濾器實(shí)現(xiàn)類是 solr.ManagedStopFilterFactory ,這是StopFilterFactory的一個特殊實(shí)現(xiàn),它使用一組從REST API管理的停用詞。
  2. managed=”english”屬性給出了一組管理停用詞的名稱,在這種情況下表示停用詞是英文文本。

用于管理 techproducts 集合中英文stop詞的REST端點(diǎn)是:

/solr/techproducts/schema/analysis/stopwords/english。

示例資源路徑應(yīng)該大多是不言自明的。應(yīng)該注意的是,ManagedStopFilterFactory實(shí)現(xiàn)確定了/schema/analysis/stopwords路徑的一部分,這是合理的,因為這是一個由架構(gòu)定義的分析組件。

接下來是使用以下過濾器的字段類型:

<filter class="solr.ManagedStopFilterFactory"
        managed="french" />

將會解決路徑:

/solr/techproducts/schema/analysis/stopwords/french

所以現(xiàn)在讓我們看一下這個API,從一個簡單的GET請求開始:

curl "http://localhost:8983/solr/techproducts/schema/analysis/stopwords/english"

假設(shè)您將此請求發(fā)送到Solr,則響應(yīng)正文是一個JSON文檔:

{
  "responseHeader":{
    "status":0,
    "QTime":1
  },
  "wordSet":{
    "initArgs":{"ignoreCase":true},
    "initializedOn":"2014-03-28T20:53:53.058Z",
    "managedList":[
      "a",
      "an",
      "and",
      "are",
       ]
  }
}

該sample_techproducts_configs configset附帶了一組預(yù)置的托管stop詞,但是您應(yīng)該只使用此文件中使用API進(jìn)行交互,而不是直接進(jìn)行編輯。

在這個回應(yīng)中應(yīng)該突出的一件事:它包含了一些詞匯的managedList以及initArgs。這是這個框架中的一個重要概念 - 被管理的資源通常具有配置和數(shù)據(jù)。對于stop詞,唯一的配置參數(shù)是一個布爾值,用于決定是否在stop詞過濾期間忽略標(biāo)記的大小寫(ignoreCase = true | false)。數(shù)據(jù)是一個單詞列表,它表示為響應(yīng)中名為 managedList 的 JSON 數(shù)組。

現(xiàn)在,我們使用HTTP PUT為英stop詞列表添加一個新詞:

curl -X PUT -H 'Content-type:application/json' --data-binary '["foo"]' "http://localhost:8983/solr/techproducts/schema/analysis/stopwords/english"

在這里,我們使用curl將一個包含單個單詞“foo”的JSON列表放到托管英語stop詞集中。如果請求成功,Solr將返回200。您也可以將多個單詞放在一個PUT請求中。

您可以通過發(fā)送該單詞的GET請求作為該集的子資源來測試是否存在特定的單詞,例如:

curl "http://localhost:8983/solr/techproducts/schema/analysis/stopwords/english/foo"

如果子資源(foo)存在,此請求將返回狀態(tài)碼200;如果不存在托管列表,則返回404。

要刪除一個停止詞,您需要這樣做:

curl -X DELETE "http://localhost:8983/solr/techproducts/schema/analysis/stopwords/english/foo"

放置/POST 用于將術(shù)語添加到現(xiàn)有列表中, 而不是完全替換該列表。這是因為在現(xiàn)有列表中添加一個術(shù)語比完全替換一個列表更常見, 因此 API 更傾向于遞增地添加術(shù)語, 特別是因為也支持刪除各個術(shù)語。

PUT/POST用于將詞添加到現(xiàn)有列表,而不是完全替換列表。這是因為向現(xiàn)有列表添加一個詞比將其全部替換為一個列表更為常見,因此 API 更傾向于遞增地添加術(shù)語,特別是由于刪除單個詞也是受支持的。

管理同義詞

大多數(shù)情況下,用于管理同義詞的API的行為類似于用于stop詞的API,除了使用單詞列表之外,它也使用映射,其中映射中每個條目的值都是一個詞的一組同義詞。與 stop 詞一樣,sample_techproducts_configs configset包含一組預(yù)先構(gòu)建的同義映射集,這些映射集適用于由schema.xml中的以下字段類型定義激活的示例數(shù)據(jù):

<fieldType name="managed_en" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ManagedStopFilterFactory" managed="english" />
    <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english" />
    <filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ManagedStopFilterFactory" managed="english" />
    <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english" />
  </analyzer>
</fieldType>

要獲取受管同義詞的映射,請發(fā)送一個GET請求到:

curl "http://localhost:8983/solr/techproducts/schema/analysis/synonyms/english"

此請求將返回如下所示的響應(yīng):

{
  "responseHeader":{
    "status":0,
    "QTime":3},
  "synonymMappings":{
    "initArgs":{
      "ignoreCase":true,
      "format":"solr"},
    "initializedOn":"2014-12-16T22:44:05.33Z",
    "managedMap":{
      "GB":
        ["GiB",
         "Gigabyte"],
      "TV":
        ["Television"],
      "happy":
        ["glad",
         "joyful"]}}}

托管的同義詞在managedMap屬性下返回,其中包含一個JSON映射,其中每個條目的值是一個詞的一組同義詞,例如上面的示例中的“happy”具有同義詞“glad”和“joyful”。

要添加一個新的同義詞映射,您可以PUT / POST一個映射,如:

curl -X PUT -H 'Content-type:application/json' --data-binary '{"mad":["angry","upset"]}' "http://localhost:8983/solr/techproducts/schema/analysis/synonyms/english"

如果PUT請求成功,API將返回狀態(tài)碼200。要確定特定詞的同義詞,請對子資源發(fā)送GET請求,例如:/schema/analysis/synonyms/english/mad,將返回["angry","upset"]。

您也可以PUT一個對稱同義詞列表,它將被擴(kuò)展成列表中每個詞的映射。例如,可以使用 JSON 列表語法而不是映射來PUT下面的對稱同義詞列表:

curl -X PUT -H 'Content-type:application/json' --data-binary '["funny", "entertaining", "whimiscal", "jocular"]' "http://localhost:8983/solr/techproducts/schema/analysis/synonyms/english"

請注意,擴(kuò)展是在處理PUT請求時執(zhí)行的,因此基礎(chǔ)持久化狀態(tài)仍然是托管映射。因此,如果在發(fā)送先前的PUT請求之后,您做了GET /schema/analysis/synonyms/english/jocular,那么您將收到一個包含["funny", "entertaining", "whimiscal"]的列表。一旦使用列表創(chuàng)建同義詞映射,每個詞都必須單獨(dú)管理。

最后,您可以通過向托管端點(diǎn)發(fā)送DELETE請求來刪除映射。

應(yīng)用托管資源更改

在Solr集合(或單一服務(wù)器模式下的Solr核心)重新加載之前,通過此REST API對受管資源所做的更改不會應(yīng)用于活動的Solr組件。

例如:在添加或刪除stop詞之后,必須在更改變?yōu)榛顒訝顟B(tài)之前重新加載核心/集合;相關(guān)的API:CoreAdmin API和Collections API。

在分布式模式下運(yùn)行時,這種方法是必需的,這樣我們才能確保同時對集合中的所有內(nèi)核進(jìn)行更改,從而保證行為的一致性和可預(yù)測性。不言而喻,您不希望您的一個副本使用不同于其他的stop詞或同義詞組。

這個apply-changes-at-reload方法的一個細(xì)微結(jié)果就是,一旦您對API進(jìn)行了修改,就無法讀取活動的數(shù)據(jù)。換句話說,API從API的角度返回最新的數(shù)據(jù),這可能與當(dāng)前Solr組件使用的數(shù)據(jù)不同。

然而,這個API實(shí)現(xiàn)的目的是在做出更改之后,在短時間內(nèi)使用重新加載來應(yīng)用這些更改,以使API返回的數(shù)據(jù)與服務(wù)器中的活動不同的時間可以忽略不計。

注意:更改諸如 stop 字詞和同義詞映射之類的內(nèi)容通常需要索引現(xiàn)有文檔 (如果被索引時間分析器使用)。RestManager 框架并沒有保護(hù)你, 它只是使得有可能以編程方式建立一組stop字、同義詞等。

RestManager端點(diǎn)

關(guān)于注冊的ManagedResources的元數(shù)據(jù)可以使用每個集合的/schema/managed端點(diǎn)。

假設(shè)您有managed_enschema.xml中定義的字段類型,那么向以下資源發(fā)送GET請求將返回關(guān)于RestManager管理哪些與模式相關(guān)的資源的元數(shù)據(jù):

curl "http://localhost:8983/solr/techproducts/schema/managed"

響應(yīng)正文是一個JSON文檔,其中包含有關(guān)/schema根目錄下的受管資源的元數(shù)據(jù):

{
  "responseHeader":{
    "status":0,
    "QTime":3
  },
  "managedResources":[
    {
      "resourceId":"/schema/analysis/stopwords/english",
      "class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource",
      "numObservers":"1"
    },
    {
      "resourceId":"/schema/analysis/synonyms/english",
      "class":"org.apache.solr.rest.schema.analysis.ManagedSynonymGraphFilterFactory$SynonymManager",
      "numObservers":"1"
    }
  ]
}

您還可以在配置使用這些資源的任何內(nèi)容之前,使用PUT/POST創(chuàng)建新的托管資源到相應(yīng)的URL。

例如,假設(shè)我們想要建立一組德語停用詞。在我們開始添加停用詞之前,我們需要創(chuàng)建端點(diǎn):

/solr/techproducts/schema/analysis/stopwords/german

要創(chuàng)建此端點(diǎn),請將以下PUT/POST請求發(fā)送給我們希望創(chuàng)建的端點(diǎn):

curl -X PUT -H 'Content-type:application/json' --data-binary \
'{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
"http://localhost:8983/solr/techproducts/schema/analysis/stopwords/german"

如果請求成功,Solr將以狀態(tài)碼200回應(yīng)。實(shí)際上,此操作在RestManager中為托管資源注冊新端點(diǎn)。從這里開始,您可以開始添加德語停用詞,如上所述:

curl -X PUT -H 'Content-type:application/json' --data-binary '["die"]' \
"http://localhost:8983/solr/techproducts/schema/analysis/stopwords/german"

對于大多數(shù)用戶來說,以這種方式創(chuàng)建資源不應(yīng)該是必需的,因為托管資源是在配置時自動創(chuàng)建的。

但是,如果受管資源不再由Solr組件使用,則可能需要顯式刪除受管資源。

例如,我們上面創(chuàng)建的德語的托管資源可以被刪除,因為沒有使用它的Solr組件,而英語停用詞的托管資源不能被刪除,因為在schema.xml中聲明了一個標(biāo)記過濾器使用它。

curl -X DELETE "http://localhost:8983/solr/techproducts/schema/analysis/stopwords/german"
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號