Solr支持哪些響應(yīng)編寫(xiě)器

2018-12-04 14:13 更新

響應(yīng)編寫(xiě)器

響應(yīng)編寫(xiě)器生成搜索的格式化的響應(yīng)。

Solr 支持各種響應(yīng)編寫(xiě)器,以確保查詢(xún)響應(yīng)可以被適當(dāng)?shù)恼Z(yǔ)言或應(yīng)用程序解析。

該 wt 參數(shù)選擇要使用的響應(yīng)編寫(xiě)器。下文中介紹了該 wt 參數(shù)最常用的設(shè)置,并提供了更多詳細(xì)討論這些內(nèi)容的部分。

  • CSV
  • GeoJSON
  • javabin
  • JSON
  • PHP
  • PHPS
  • python
  • ruby
  • smile
  • velocity
  • XLSX
  • XML
  • XSLT

JSON響應(yīng)編寫(xiě)器

默認(rèn)的 Solr 響應(yīng)編寫(xiě)器是 JsonResponseWriter,它在 JavaScript 對(duì)象表示法 (JSON) 中格式化輸出,它是 RFC 4627 中指定的輕量級(jí)數(shù)據(jù)交換格式。如果您在請(qǐng)求中沒(méi)有設(shè)置 wt 參數(shù),則默認(rèn)情況下將獲得 JSON。

下面是一個(gè)簡(jiǎn)單的查詢(xún)(q=id:VS1GB400C3)的示例響應(yīng):

{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":7,
    "params":{
      "q":"id:VS1GB400C3"}},
  "response":{"numFound":1,"start":0,"maxScore":2.3025851,"docs":[
      {
        "id":"VS1GB400C3",
        "name":["CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail"],
        "manu":["Corsair Microsystems Inc."],
        "manu_id_s":"corsair",
        "cat":["electronics",
          "memory"],
        "price":[74.99],
        "popularity":[7],
        "inStock":[true],
        "store":["37.7752,-100.0232"],
        "manufacturedate_dt":"2006-02-13T15:26:37Z",
        "payloads":["electronics|4.0 memory|2.0"],
        "_version_":1549728120626479104}]
  }}

JSON 編寫(xiě)器的默認(rèn) MIME 類(lèi)型是 application/json,但是這可以在 solrconfig.xml 中覆蓋,例如在 "techproducts" 配置中的此示例中:

<queryResponseWriter name="json" class="solr.JSONResponseWriter">
  <!-- For the purposes of the tutorial, JSON response are written as
       plain text so that it's easy to read in *any* browser.
       If you are building applications that consume JSON, just remove
       this override to get the default "application/json" mime type.
    -->
  <str name="content-type">text/plain</str>
</queryResponseWriter>

JSON 特定的參數(shù)

json.nl 參數(shù)

此參數(shù)控制 NamedLists 的輸出格式,其中順序比按名稱(chēng)訪問(wèn)更重要。NamedList 當(dāng)前用于字段分面數(shù)據(jù)。

該 json.nl 參數(shù)采用以下值:

  • flat

    默認(rèn)值。NamedList 被表示為平面數(shù)組,交替的名稱(chēng)和值。

    如果輸入為NamedList("a"=1, "bar"="foo", null=3, null=null),輸出將是["a",1, "bar","foo", null,3, null,null]。

  • map

    NamedList 被表示為一個(gè) JSON 對(duì)象。雖然這是最簡(jiǎn)單的映射,但 NamedList 可以具有可選鍵、重復(fù)鍵和保留順序。為 NamedList 使用 JSON 對(duì)象(本質(zhì)上是一個(gè) map 或者 hash)會(huì)導(dǎo)致一些信息的丟失。

    如果輸入是NamedList("a"=1, "bar"="foo", null=3, null=null),則輸出將是{"a":1, "bar":"foo", "":3, "":null}。

  • arrarr

    NamedList 被表示為兩個(gè)元素?cái)?shù)組的數(shù)組。

    如果輸入為NamedList("a"=1, "bar"="foo", null=3, null=null),則輸出將是[["a",1], ["bar","foo"], [null,3], [null,null]]。

  • arrmap

    NamedList 被表示為一個(gè) JSON 對(duì)象數(shù)組。

    如果輸入為NamedList("a"=1, "bar"="foo", null=3, null=null),則輸出將是[{"a":1}, {"b":2}, 3, null]。

  • arrntv

    NamedList 被表示為名稱(chēng)類(lèi)型值 JSON 對(duì)象的數(shù)組。

    如果輸入為NamedList("a"=1, "bar"="foo", null=3, null=null),則輸出將是[{"name":"a","type":"int","value":1}, {"name":"bar","type":"str","value":"foo"}, {"name":null,"type":"int","value":3}, {"name":null,"type":"null","value":null}]。

json.wrf 參數(shù)

json.wrf=function 在 JSON 響應(yīng)中添加一個(gè)包裝函數(shù),在 AJAX 中用于指定 JavaScript 回調(diào)函數(shù)的動(dòng)態(tài)腳本標(biāo)記很有用。

標(biāo)準(zhǔn)的XML響應(yīng)編寫(xiě)器

XML 響應(yīng)編寫(xiě)器是 Solr 當(dāng)前包含的最通用和可重用的響應(yīng)編寫(xiě)器。這是大多數(shù)關(guān)于 Solr 查詢(xún)響應(yīng)的討論和文檔中使用的格式。

請(qǐng)注意,XSLT 響應(yīng)編寫(xiě)器可用于將此編寫(xiě)器生成的 XML 轉(zhuǎn)換為其他詞匯表或基于文本的格式。

XML 響應(yīng)編寫(xiě)器的行為可以由以下查詢(xún)參數(shù)驅(qū)動(dòng)。

  • version 參數(shù)

    version參數(shù)確定響應(yīng)中使用的 XML 協(xié)議。強(qiáng)烈建議客戶(hù)始終指定協(xié)議版本,以確保如果升級(jí) Solr 服務(wù)器并引入新的默認(rèn)格式,則收到的響應(yīng)格式不會(huì)意外更改。

    目前唯一支持的版本值是2.2。responseHeader的格式更改為使用與響應(yīng)的其余部分相同的<lst>結(jié)構(gòu)。

    默認(rèn)值是最新支持的。

  • stylesheet 參數(shù)

    stylesheet參數(shù)可以用來(lái)指導(dǎo) Solr 在它返回的 xml 響應(yīng)中包含<?xml-stylesheet type="text/xsl" href="…?"?>聲明。

    默認(rèn)行為是不返回任何樣式表聲明。

    不鼓勵(lì)使用stylesheet參數(shù),因?yàn)槟壳斑€沒(méi)有指定外部樣式的方法,而且 Solr 發(fā)行版中沒(méi)有提供樣式。這是一個(gè)傳統(tǒng)的參數(shù),可以在將來(lái)的版本中進(jìn)一步發(fā)展。
  • indent 參數(shù)

    如果indent參數(shù)被使用,并且有一個(gè)非空的值,那么 Solr 會(huì)嘗試縮進(jìn)它的 XML 響應(yīng),使它更容易被人讀取。

    默認(rèn)行為不是縮進(jìn)。

XSLT 響應(yīng)編寫(xiě)器

XSLT 響應(yīng)編寫(xiě)器將 XML 樣式表應(yīng)用于輸出。它可以用于諸如 RSS 提要的格式化結(jié)果等任務(wù)。

tr參數(shù)

XSLT 響應(yīng)編寫(xiě)器接受一個(gè)參數(shù):tr 參數(shù),它標(biāo)識(shí)要使用的 XML 轉(zhuǎn)換。該轉(zhuǎn)換必須在 Solr 的 "/xslt 目錄" 中找到。

響應(yīng)的內(nèi)容類(lèi)型根據(jù) XSLT 轉(zhuǎn)換中的 <xsl:output> 語(yǔ)句設(shè)置的,例如:<xsl:output media-type="text/html"/>

XSLT配置

下面的示例從 Solr 分布中的 sample_techproducts_configs 配置集中顯示了 XSLT 響應(yīng)編寫(xiě)器的配置方式。

<!--
  Changes to XSLT transforms are taken into account
  every xsltCacheLifetimeSeconds at most.
-->
<queryResponseWriter name="xslt"
                     class="org.apache.solr.request.XSLTResponseWriter">
  <int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>

值為5的 xsltCacheLifetimeSeconds 對(duì)于開(kāi)發(fā)很有好處,可以快速看到 XSLT 的變化。對(duì)于生產(chǎn),您可能需要更高的價(jià)值。

二進(jìn)制響應(yīng)編寫(xiě)器

這是 Solr 用于節(jié)點(diǎn)間通信以及客戶(hù)端 - 服務(wù)器通信的自定義二進(jìn)制格式。SolrJ 使用此選項(xiàng)作為索引和查詢(xún)的默認(rèn)值。請(qǐng)參閱客戶(hù)端API獲取更多詳細(xì)信息。

GeoJSON 響應(yīng)編寫(xiě)器

返回 Solr 導(dǎo)致在 GeoJSON 增強(qiáng)了特定于 Solr 的 JSON。要使用此功能,請(qǐng)?jiān)O(shè)置 wt=geojson 和 geojson.field 為空間 Solr 的字段的名稱(chēng)。并非所有空間字段類(lèi)型都受支持,并且如果使用不受支持的類(lèi)型,則會(huì)出現(xiàn)錯(cuò)誤。

Python響應(yīng)編寫(xiě)器

Solr 有一個(gè)可選的 Python 響應(yīng)格式,通過(guò)以下方式擴(kuò)展其 JSON 輸出,以允許 python 解釋器安全地評(píng)估響應(yīng):

  • true 與 false 變?yōu)?True 與 False
  • 在需要的地方使用 Python unicode 字符串
  • ASCII 輸出(使用 Unicode 轉(zhuǎn)義)用于減少容易出錯(cuò)的互操作性
  • 換行符被轉(zhuǎn)義
  • null 更改為 None

PHP響應(yīng)編寫(xiě)器和PHP序列化響應(yīng)編寫(xiě)器

Solr 有一個(gè) PHP 響應(yīng)格式,輸出一個(gè)可以評(píng)估的數(shù)組(可以是 PHP 代碼)。設(shè)置 wt 參數(shù)設(shè)置為 php 調(diào)用 PHP 響應(yīng)編寫(xiě)器。

用法示例:

$code = file_get_contents('http://localhost:8983/solr/techproducts/select?q=iPod&wt=php');
eval("$result = " . $code . ";");
print_r($result);

Solr 還包括一個(gè) PHP 序列化響應(yīng)編寫(xiě)器,它將輸出格式化為一個(gè)序列化數(shù)組。設(shè)置 wt 參數(shù)為 phps 調(diào)用 PHP 序列化響應(yīng)編寫(xiě)器。

用法示例:

$serializedResult = file_get_contents('http://localhost:8983/solr/techproducts/select?q=iPod&wt=phps');
$result = unserialize($serializedResult);
print_r($result);

Ruby響應(yīng)編寫(xiě)器

Solr 有一個(gè)可選的 Ruby 響應(yīng)格式,可以通過(guò)以下方式擴(kuò)展其 JSON 輸出,以便 Ruby 的解釋器可以安全地評(píng)估響應(yīng):

  • Ruby 的單引號(hào)字符串被用來(lái)防止可能的字符串攻擊。
  • \ 和 ' 是唯一的兩個(gè)字符逃脫。
  • Unicode 轉(zhuǎn)義不被使用。數(shù)據(jù)是以原始 UTF-8 編寫(xiě)的。
  • 零用于 null。
  • => 用作映射中的鍵/值(key/value)分隔符。

下面是一個(gè)簡(jiǎn)單的例子,說(shuō)明如何使用 Ruby 響應(yīng)格式來(lái)查詢(xún) Solr:

require 'net/http'
h = Net::HTTP.new('localhost', 8983)
hresp, data = h.get('/solr/techproducts/select?q=iPod&wt=ruby', nil)
rsp = eval(data)
puts 'number of matches = ' + rsp['response']['numFound'].to_s
#print out the name field for each returned document
rsp['response']['docs'].each { |doc| puts 'name field = ' + doc['name'\] }

CSV響應(yīng)編寫(xiě)器

CSV響應(yīng)編寫(xiě)器返回以逗號(hào)分隔的值 (CSV) 格式的文檔列表。通常包括在響應(yīng)中的其他信息(如分面信息)不包括在內(nèi)。

CSV響應(yīng)編寫(xiě)器支持多值字段以及偽字段,并且此CSV格式的輸出與 Solr 的 CSV 更新格式兼容。

CSV參數(shù)

這些參數(shù)指定將返回的 CSV 格式。您可以接受默認(rèn)值或指定您自己的。

參數(shù) 默認(rèn)值

csv.encapsulator

"

csv.escape

沒(méi)有

csv.separator

,

csv.header

默認(rèn)為true。如果false,Solr 不打印列標(biāo)題

csv.newline

\n

csv.null

默認(rèn)為零長(zhǎng)度的字符串。當(dāng)文檔沒(méi)有特定字段的值時(shí)使用此參數(shù)

多值字段CSV參數(shù)

這些參數(shù)指定如何對(duì)多值字段進(jìn)行編碼。這些值的每字段重寫(xiě)可以使用 f.<fieldname>.csv.separator=|。

參數(shù) 默認(rèn)值

csv.mv.encapsulator

沒(méi)有

csv.mv.escape

\

csv.mv.separator

默認(rèn)為csv.separator

CSV編寫(xiě)器示例

例如 http://localhost:8983/solr/techproducts/select?q=ipod&fl=id,cat,name,popularity,price,score&wt=csv 將返回:

id,cat,name,popularity,price,score
IW-02,"electronics,connector",iPod & iPod Mini USB 2.0 Cable,1,11.5,0.98867977
F8V7067-APL-KIT,"electronics,connector",Belkin Mobile Power Cord for iPod w/ Dock,1,19.95,0.6523595
MA147LL/A,"electronics,music",Apple 60 GB iPod with Video Playback Black,10,399.0,0.2446348

Velocity響應(yīng)編寫(xiě)器

該 VelocityResponseWriter 通過(guò) Apache 速度模板化來(lái)處理 Solr 響應(yīng)和請(qǐng)求上下文。

有關(guān)詳細(xì)信息,請(qǐng)參閱“速度響應(yīng)編寫(xiě)器”部分。

Smile響應(yīng)編寫(xiě)器

Smile 格式是一個(gè) JSON 兼容的二進(jìn)制格式,在這里詳細(xì)描述:http://wiki.fasterxml.com/SmileFormat。

XLSX響應(yīng)編寫(xiě)器

使用此項(xiàng)可以將響應(yīng)作為. xlsx (Microsoft Excel) 格式的電子表格。它接受 colwidth.<field-name> 和 colname.<field-name> 表單中的參數(shù),幫助您自定義列寬和列名。

這個(gè)響應(yīng)編寫(xiě)器已經(jīng)被添加為提取庫(kù)的一部分,并且只有在服務(wù)器類(lèi)路徑中存在提取貢獻(xiàn)時(shí)才起作用。用 lib 指令定義類(lèi)路徑是不夠的。相反,您需要將必要的. jar 手動(dòng)復(fù)制到 Solr web 的 lib 目錄中。您可以從您的 $SOLR_INSTALL 目錄運(yùn)行這些命令:

cp contrib/extraction/lib/*.jar server/solr-webapp/webapp/WEB-INF/lib/
cp dist/solr-cell-6.3.0.jar server/solr-webapp/webapp/WEB-INF/lib/

一旦庫(kù)就位后,您可以將 wt=xlsx 添加您的請(qǐng)求,結(jié)果將作為 XLSX 表單返回。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)