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

Solr結(jié)果集群

2018-11-29 15:50 更新

Solr 集群(或集群分析)插件嘗試自動(dòng)發(fā)現(xiàn)相關(guān)的搜索命中(文檔)組,并將可讀的標(biāo)簽分配給這些組。

默認(rèn)情況下,在 Solr 中,集群算法被應(yīng)用于每個(gè)查詢(xún)的搜索結(jié)果 - 這被稱(chēng)為在線(xiàn)集群。雖然 Solr 包含全索引集群(離線(xiàn)集群)的擴(kuò)展,但本節(jié)將重點(diǎn)討論在線(xiàn)集群。

為給定查詢(xún)發(fā)現(xiàn)的集群可以視為動(dòng)態(tài)方面。如果定期分析比較困難(字段值不是事先知道的),或者查詢(xún)?cè)诒举|(zhì)上是探索性的,這是有利的。查看 Carrot2 項(xiàng)目的演示頁(yè)面,查看搜索結(jié)果集群的實(shí)例(可視化中的組在右側(cè)搜索結(jié)果中自動(dòng)發(fā)現(xiàn),沒(méi)有涉及外部信息)。

Solr集群

發(fā)給系統(tǒng)的查詢(xún)是 Solr。顯然,分面不能產(chǎn)生一組類(lèi)似的組,盡管這兩種技術(shù)的目標(biāo)是相似的 - 讓用戶(hù)瀏覽一組搜索結(jié)果,并重新調(diào)整查詢(xún)或?qū)⒔裹c(diǎn)縮小到當(dāng)前文檔的一個(gè)子集。集群也類(lèi)似于結(jié)果分組,因?yàn)樗梢詭椭钊氲夭榭此阉鹘Y(jié)果,超出前幾個(gè)點(diǎn)擊率。

集群概念

傳遞給集群組件的每個(gè)文檔都由幾個(gè)邏輯部分組成:

  • 唯一的標(biāo)識(shí)符
  • 起源 URL
  • 標(biāo)題
  • 主要內(nèi)容
  • 標(biāo)題和內(nèi)容的語(yǔ)言代碼

標(biāo)識(shí)符部分是必須的,其他所有部分都是可選的,但至少需要一個(gè)文本字段(標(biāo)題或內(nèi)容)來(lái)使集群過(guò)程合理。重要的是要記住,邏輯文檔部分必須映??射到特定的架構(gòu)及其字段。集群的內(nèi)容(文本)可以來(lái)自存儲(chǔ)的文本字段或使用高亮過(guò)濾的上下文,所有這些選項(xiàng)將在配置部分進(jìn)行說(shuō)明。

一個(gè)集群算法是,在搜索結(jié)果中發(fā)現(xiàn)文檔之間的關(guān)系,并且形成可讀的集群標(biāo)簽的實(shí)際邏輯 (實(shí)現(xiàn))。根據(jù)算法的選擇,集群可能會(huì)變化。Solr 提供了幾個(gè)在開(kāi)源 Carrot2 項(xiàng)目中實(shí)現(xiàn)的算法,也有商業(yè)替代方案。

集群快速入門(mén)示例

Solr 附帶的 “techproducts” 示例已預(yù)先配置了所有必要的結(jié)果集群組件,但默認(rèn)情況下它們是禁用的。

要啟用集群組件 contrib 和配置為使用它的專(zhuān)用搜索處理程序,請(qǐng)?jiān)谶\(yùn)行示例時(shí)指定 JVM 系統(tǒng)屬性:

bin/solr start -e techproducts -Dsolr.clustering.enabled=true

您現(xiàn)在可以通過(guò)在瀏覽器中打開(kāi)以下 URL 來(lái)嘗試集群處理程序:

http://localhost:8983/solr/techproducts/clustering?q=:&rows=100

輸出 XML 應(yīng)包括搜索匹配和最后自動(dòng)發(fā)現(xiàn)的集群的數(shù)組,類(lèi)似于此處顯示的輸出:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">299</int>
  </lst>
  <result name="response" numFound="32" start="0" maxScore="1.0">
    <doc>
      <str name="id">GB18030TEST</str>
      <str name="name">Test with some GB18030 encoded characters</str>
      <arr name="features">
        <str>No accents here</str>
        <str>這是一個(gè)功能</str>
        <str>This is a feature (translated)</str>
        <str>這份文件是很有光澤</str>
        <str>This document is very shiny (translated)</str>
      </arr>
      <float name="price">0.0</float>
      <str name="price_c">0,USD</str>
      <bool name="inStock">true</bool>
      <long name="_version_">1448955395025403904</long>
      <float name="score">1.0</float>
    </doc>

    <!-- more search hits, omitted -->
  </result>

  <arr name="clusters">
    <lst>
      <arr name="labels">
        <str>DDR</str>
      </arr>
      <double name="score">3.9599865057283354</double>
      <arr name="docs">
        <str>TWINX2048-3200PRO</str>
        <str>VS1GB400C3</str>
        <str>VDBDB1A16</str>
      </arr>
    </lst>
    <lst>
      <arr name="labels">
        <str>iPod</str>
      </arr>
      <double name="score">11.959228467119022</double>
      <arr name="docs">
        <str>F8V7067-APL-KIT</str>
        <str>IW-02</str>
        <str>MA147LL/A</str>
      </arr>
    </lst>

    <!-- More clusters here, omitted. -->

    <lst>
      <arr name="labels">
        <str>Other Topics</str>
      </arr>
      <double name="score">0.0</double>
      <bool name="other-topics">true</bool>
      <arr name="docs">
        <str>adata</str>
        <str>apple</str>
        <str>asus</str>
        <str>ati</str>
        <!-- other unassigned document IDs here -->
      </arr>
    </lst>
  </arr>
</response>

這個(gè)查詢(xún)(*:*)發(fā)現(xiàn)了幾個(gè)集群,將搜索命中分為各種類(lèi)別:DDR、iPod、硬盤(pán)驅(qū)動(dòng)器等。每個(gè)集群都有一個(gè)標(biāo)簽和分?jǐn)?shù),表示集群的“優(yōu)點(diǎn)”。分?jǐn)?shù)是特定于算法的,并且僅在與同一集合中的其他集群的分?jǐn)?shù)相關(guān)時(shí)才是有意義的。換言之,如果集群 A 比集群 B 具有更高的分?jǐn)?shù),則集群 A 應(yīng)該具有更好的質(zhì)量(具有更好的標(biāo)簽和更連貫的文檔集)。每個(gè)群集都有一組屬于它的文檔的標(biāo)識(shí)符數(shù)組。這些標(biāo)識(shí)符對(duì)應(yīng)于架構(gòu)中聲明的 uniqueKey 字段。

根據(jù)輸入文檔的質(zhì)量,一些集群可能沒(méi)有多大意義。有些文件可能被排除在外,根本就不會(huì)被集群;這些將被分配到合成的其他主題組,標(biāo)記的 other-topics 屬性設(shè)置為 true(請(qǐng)參閱上面的XML 轉(zhuǎn)儲(chǔ)為例)。其他主題組的分?jǐn)?shù)為零。

安裝集群 Contrib

集群 contrib 擴(kuò)展需要 dist/solr-clustering-*.jar 和所有 contrib/clustering/lib 下的 JAR。

集群配置

集群搜索組件和請(qǐng)求處理程序的聲明

集群擴(kuò)展是一個(gè)搜索組件,必須在 solrconfig.xml 中聲明。這樣一個(gè)組件可以作為鏈中的最后一個(gè)組件添加到請(qǐng)求處理程序中(因?yàn)樗枰阉鹘Y(jié)果,這些搜索結(jié)果必須先被搜索組件提取)。

示例配置可能如下所示:

  1. 包括所需的 contrib JAR。請(qǐng)注意,默認(rèn)路徑是相對(duì)于 Solr 核心的,所以他們可能需要調(diào)整您的配置,或明確的規(guī)格:$solr.install.dir。
    <lib dir="${solr.install.dir:../../..}/contrib/clustering/lib/" regex=".*\.jar" />
    <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
  2. 搜索組件的聲明。每個(gè)組件還可以聲明多個(gè)集群管道,可以通過(guò)傳遞 clustering.engine=(engine name)URL 參數(shù)在運(yùn)行時(shí)選擇它們。
    <searchComponent name="clustering" class="solr.clustering.ClusteringComponent">
      <!-- Lingo clustering algorithm -->
      <lst name="engine">
        <str name="name">lingo</str>
        <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
      </lst>
    
      <!-- An example definition for the STC clustering algorithm. -->
      <lst name="engine">
        <str name="name">stc</str>
        <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
      </lst>
    </searchComponent>
  3. 一個(gè)請(qǐng)求處理程序,我們使用它附加上面聲明的集群組件。
    <requestHandler name="/clustering"
                    class="solr.SearchHandler">
      <lst name="defaults">
        <bool name="clustering">true</bool>
        <bool name="clustering.results">true</bool>
    
        <!-- Logical field to physical field mapping. -->
        <str name="carrot.url">id</str>
        <str name="carrot.title">doctitle</str>
        <str name="carrot.snippet">content</str>
    
        <!-- Configure any other request handler parameters. We will cluster the
             top 100 search results so bump up the 'rows' parameter. -->
        <str name="rows">100</str>
        <str name="fl">*,score</str>
      </lst>
    
      <!-- Append clustering at the end of the list of search components. -->
      <arr name="last-components">
        <str>clustering</str>
      </arr>
    </requestHandler>

集群組件的配置參數(shù)

以下每個(gè)集群工具或整個(gè)集群組件(取決于它們?cè)谀睦锫暶鳎┑南铝袇?shù)都可用:

  • clustering 參數(shù)

    當(dāng)值為true,表示集群組件已啟用。

  • clustering.engine 參數(shù)

    聲明使用哪個(gè)集群工具。如果不存在,則首先聲明將成為默認(rèn)工具的工具。

  • clustering.results 參數(shù)

    當(dāng)為true時(shí),該組件將執(zhí)行搜索結(jié)果的集群(這應(yīng)該被啟用)。

  • clustering.collection 參數(shù)

    當(dāng)為true時(shí),該組件將執(zhí)行整個(gè)文檔索引的集群(本節(jié)不包括全索引集群)。

在工具聲明級(jí)別,支持以下參數(shù):

  • carrot.algorithm 參數(shù)

    算法類(lèi)。 

  • carrot.resourcesDir 參數(shù)

    特定于算法的資源和配置文件(停用詞、其他詞匯資源、默認(rèn)設(shè)置)。默認(rèn)指向conf/clustering/carrot2/

  • carrot.outputSubClusters 參數(shù)

    如果為true算法支持分級(jí)集群,子集群也將被發(fā)射。默認(rèn)值:true。

  • carrot.numDescriptions 參數(shù)

    返回的每個(gè)集群標(biāo)簽的最大數(shù)量(如果該算法將多個(gè)標(biāo)簽分配給集群)。

該 carrot.algorithm 參數(shù)應(yīng)包含由 Carrot2 框架所支持的算法的完全限定類(lèi)名。目前,以下算法可用:

  • org.carrot2.clustering.lingo.LingoClusteringAlgorithm (開(kāi)源)
  • org.carrot2.clustering.stc.STCClusteringAlgorithm (開(kāi)源)
  • org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm (開(kāi)源)
  • com.carrotsearch.lingo3g.Lingo3GClusteringAlgorithm (商業(yè))

有關(guān)這些算法的特性比較,請(qǐng)參閱以下鏈接:

選擇哪種算法取決于流量(STC 比 Lingo 快,但可以說(shuō)產(chǎn)生的直觀性較差,Lingo3G 是最快的算法,但不是免費(fèi)的或開(kāi)源的)、預(yù)期的結(jié)果(Lingo3G 提供了分層集群,Lingo 和 STC 提供不分層次的集群),以及輸入數(shù)據(jù)(每個(gè)算法將稍微不同地將輸入進(jìn)行集群)。沒(méi)有人知道哪種算法是“最好的”。

上下文和全字段集群

集群工具可以將集群應(yīng)用于(已存儲(chǔ)的)字段的全部?jī)?nèi)容,或者可以在集群之前運(yùn)行內(nèi)部高亮度傳遞來(lái)提取上下文片段。如果邏輯代碼段字段包含大量?jī)?nèi)容(這會(huì)影響集群性能),建議使用高亮顯示。高亮顯示還可以提高集群的質(zhì)量,因?yàn)閭鬟f給算法的內(nèi)容將更關(guān)注于查詢(xún)(這將是查詢(xún)特定的上下文)。以下參數(shù)控制內(nèi)部高亮。

  • carrot.produceSummary 參數(shù)

    當(dāng)為true時(shí),集群組件將對(duì)指向carrot.titlecarrot.snippet的邏輯字段的內(nèi)容上運(yùn)行高亮傳遞。否則,這些字段的全部?jī)?nèi)容將被聚集。

  • carrot.fragSize 參數(shù)

    由高亮創(chuàng)建的片段的大小(以字符為符號(hào))。如果沒(méi)有指定,將使用默認(rèn)的高亮 fragsize(hl.fragsize)。

  • carrot.summarySnippets 參數(shù)

    要為集群生成的摘要片段的數(shù)量。如果未指定,則將使用默認(rèn)突出顯示片段計(jì)數(shù)(hl.snippets)。

文檔字段映射的邏輯

正如“集群概念”中已經(jīng)提到的那樣,集群組件對(duì)由需要映射到存儲(chǔ)在 Solr 中的數(shù)據(jù)的物理架構(gòu)的由邏輯部分組成的“文檔”進(jìn)行集群。字段映射屬性提供字段和邏輯文檔部分之間的連接。請(qǐng)注意,title 和 snippet 字段的內(nèi)容必須存儲(chǔ),以便在搜索時(shí)可以檢索到它。

  • carrot.title 參數(shù)

    應(yīng)該映射到邏輯文檔標(biāo)題的字段(或者以逗號(hào)或空格分隔的字段列表)。與內(nèi)容(片段)相比,集群算法通常對(duì)標(biāo)題字段的內(nèi)容給予更重的權(quán)重。為獲得最佳效果,該字段應(yīng)包含簡(jiǎn)潔、無(wú)噪音的內(nèi)容。如果數(shù)據(jù)中沒(méi)有明確的標(biāo)題,則可以將此參數(shù)留空。

  • carrot.snippet 參數(shù)

    應(yīng)該映射到邏輯文檔的主要內(nèi)容的字段(或以逗號(hào)或空格分隔的字段列表)。如果此映射指向非常大的內(nèi)容字段,則集群的性能可能會(huì)顯著下降。另一種方法是使用查詢(xún)上下文片段來(lái)進(jìn)行集群,而不是使用完整的字段內(nèi)容。您可以參閱carrot.produceSummary參數(shù)說(shuō)明來(lái)獲取更加詳細(xì)的信息。

  • carrot.url 參數(shù)

    應(yīng)該映射到邏輯文檔的內(nèi)容URL的字段。如果不需要,留空白。

集群多語(yǔ)言?xún)?nèi)容

字段映射規(guī)范可以包含一個(gè) carrot.lang 參數(shù),該參數(shù)定義存儲(chǔ)寫(xiě)入文檔的標(biāo)題和內(nèi)容的語(yǔ)言的 ISO 639-1 代碼的字段。這個(gè)信息可以基于對(duì)文檔來(lái)源的先驗(yàn)知識(shí)或者在索引時(shí)間應(yīng)用的語(yǔ)言檢測(cè)過(guò)濾器而被存儲(chǔ)在索引中。Carrot2 框架內(nèi)的所有算法都將接受在 LanguageCode 枚舉中定義的語(yǔ)言的 ISO 代碼。

語(yǔ)言提示使集群算法可以更輕松地在輸入中分隔來(lái)自不同語(yǔ)言的文檔,并為集群選擇正確的語(yǔ)言資源。如果您確實(shí)有多語(yǔ)言查詢(xún)結(jié)果(或以不同于英語(yǔ)的語(yǔ)言查詢(xún)結(jié)果),強(qiáng)烈建議適當(dāng)?shù)赜成湔Z(yǔ)言字段。

  • carrot.lang

    存儲(chǔ)文檔的文本字段的語(yǔ)言的 ISO 639-1 代碼的字段。

  • carrot.lcmap

    任意字符串映射到由carrot.lang使用的 ISO 639 雙字母代碼。該參數(shù)的語(yǔ)法與langid.map.lcmap相同,比如:

    langid.map.lcmap=japanese:ja polish:pl english:en

默認(rèn)語(yǔ)言也可以使用 Carrot2 特定的算法屬性(在本例中為 MultilingualClustering.defaultLanguage 屬性)進(jìn)行設(shè)置。

調(diào)整算法設(shè)置

Solr 附帶的算法正在使用它們的默認(rèn)設(shè)置,這對(duì)于所有的數(shù)據(jù)集都是不夠的。所有算法都有詞匯資源和資源(停用詞,詞干,參數(shù)),可能需要調(diào)整以獲得更好的集群(和集群標(biāo)簽)。對(duì)于基于 Carrot2 的算法,最好參考一個(gè)名為 Carrot2 Workbench(截圖如下)的專(zhuān)用調(diào)試應(yīng)用程序。從這個(gè)應(yīng)用程序中,您可以將一組算法屬性導(dǎo)出為一個(gè) XML 文件,然后將其放置在由carrot.resourcesDir 指向的位置下。

  Solr集群

為集群提供默認(rèn)值

在集群組件中聲明的所有引擎(算法)的默認(rèn)屬性都放置在 carrot.resourcesDir 下,并具有預(yù)期的文件名:engineName-attributes.xml。因此,對(duì)于一個(gè)名為 lingo 的引擎和默認(rèn)值carrot.resourcesDir,這些屬性會(huì)從 conf/clustering/carrot2/lingo-attributes.xml 的文件中讀取。

下面顯示了將文檔的默認(rèn)語(yǔ)言更改為波蘭語(yǔ)的示例 XML 文件。

<attribute-sets default="attributes">
  <attribute-set id="attributes">
    <value-set>
      <label>attributes</label>
      <attribute key="MultilingualClustering.defaultLanguage">
        <value type="org.carrot2.core.LanguageCode" value="POLISH"/>
      </attribute>
    </value-set>
  </attribute-set>
</attribute-sets>

在查詢(xún)時(shí)調(diào)整算法

集群組件和 Carrot2 集群算法可以接受查詢(xún)時(shí)間屬性覆蓋。請(qǐng)注意,某些事情(例如詞匯資源)只能初始化一次(在啟動(dòng)時(shí),通過(guò) XML 配置文件)。

為 Lingo 算法更改 LingoClusteringAlgorithm.desiredClusterCountBaseLingo 參數(shù)的示例查詢(xún):

http://localhost:8983/solr/techproducts/clustering?q=:&rows=100&LingoClusteringAlgorithm.desiredClusterCountBase = 20

集群引擎(solrconfig.xml 聲明的算法)也可以在運(yùn)行時(shí)通過(guò)傳遞 clustering.engine=namerequest 屬性來(lái)改變:

http://localhost:8983/solr/techproducts/clustering?q=:&rows=100&clustering.engine=kmeans

有關(guān)動(dòng)態(tài)集群的性能注意事項(xiàng)

搜索結(jié)果的動(dòng)態(tài)集群有兩個(gè)主要的性能損失:

  • 獲取大于平常數(shù)量的搜索結(jié)果(50、100或更多文檔)的成本增加
  • 集群本身的額外計(jì)算成本。

對(duì)于簡(jiǎn)單的查詢(xún),集群時(shí)間通常會(huì)占據(jù)獲取時(shí)間。如果文檔內(nèi)容很長(zhǎng),則存儲(chǔ)內(nèi)容的檢索可能成為瓶頸。可以通過(guò)以下幾種方式降低集群的性能影響:

  • 通過(guò)啟用 carrot.produceSummary 屬性,將較少的內(nèi)容反饋給集群算法。
  • 對(duì)所選字段(僅標(biāo)題)執(zhí)行集群,使輸入變小。
  • 使用更快的算法(STC 代替 Lingo,Lingo3G 代替 STC),
  • 調(diào)整與特定算法直接相關(guān)的性能屬性。

其中一些技術(shù)在 Apache SOLR 和 Carrot2 集成策略文檔中進(jìn)行了描述,可在:http://carrot2.github.io/solr-integration-strategies 上找到。Carrot2 手冊(cè)中還包含了提高性能的主題,網(wǎng)址為:http://doc.carrot2.org/#section.advanced-topics.fine-tuning.performance。

其他資源

以下資源提供了有關(guān) Solr 中的集群組件及其潛在應(yīng)用程序的其他信息。

  • Apache Solr 和 Carrot2 集成策略:http://carrot2.github.io/solr-integration-strategies
  • Solr 搜索結(jié)果的集群和可視化:http://vimeo.com/26616444
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)