TermsComponent組件介紹

2018-11-30 15:08 更新
TermsComponent組件提供對(duì)字段中的索引詞的訪問以及與每個(gè)詞匹配的文檔數(shù)量。這對(duì)于構(gòu)建 auto-suggest 功能或在 term 級(jí)別而不是搜索或文檔級(jí)別操作的任何其他功能都很有用。檢索索引順序中的 term 非???,因?yàn)閷?shí)現(xiàn)直接使用 Lucene 的 TermEnum 來遍歷術(shù)語字典。

從某種意義上說,這個(gè)搜索組件在整個(gè)索引上提供了快速的 field-faceting,不受基本查詢或任何過濾器的限制。返回的文檔頻率是與該詞匹配的文檔數(shù)量,包括任何已被標(biāo)記為刪除但尚未從索引中刪除的文檔。

配置TermsComponent組件

默認(rèn)情況下,TermsComponent組件已在 solrconfig.xml 針對(duì)每個(gè)集合進(jìn)行了配置。

定義TermsComponent組件

定義 Term 搜索組件很簡(jiǎn)單:簡(jiǎn)單地給它一個(gè)名稱并使用 solr.TermsComponent 類。

<searchComponent name="terms" class="solr.TermsComponent"/>

這使得該組件可供使用,但是直到包含在請(qǐng)求處理程序中才會(huì)被使用。

在請(qǐng)求處理程序中使用TermsComponent組件

TermsComponent 組件包含在 Solr 的現(xiàn)成的請(qǐng)求處理程序中的 /terms 請(qǐng)求處理程序中 - 請(qǐng)參閱 Implicit RequestHandlers。

請(qǐng)注意,此請(qǐng)求處理程序的默認(rèn)值將參數(shù) “terms” 設(shè)置為 true,這允許根據(jù)請(qǐng)求返回條件。參數(shù) “distrib” 被設(shè)置為 false,這使得這個(gè)處理程序只能在一個(gè) Solr 內(nèi)核上使用。

如果您愿意的話,您可以將這個(gè)組件添加到另一個(gè)處理程序中,并且在 HTTP 請(qǐng)求中傳遞 “terms = true” 以獲得條件。如果僅在單獨(dú)的處理程序中定義它,則在查詢時(shí)必須使用該處理程序,以獲取條件而不是將常規(guī)文檔作為結(jié)果。

TermsComponent 組件參數(shù)

以下參數(shù)允許您控制返回的 term。如果您想永久設(shè)置它們,也可以使用請(qǐng)求處理程序來配置其中的任何一個(gè)?;蛘?,您可以將它們添加到查詢請(qǐng)求中。這些參數(shù)是:

  • terms 參數(shù)

    如果設(shè)置為true,則啟用條款組件。默認(rèn)情況下,條款組件處于關(guān)閉狀態(tài)(false)。例: terms=true

  • terms.fl 參數(shù)

    指定從中檢索 term 的字段。如果terms=true,則該參數(shù)是必需的。例: terms.fl=title

  • terms.list 參數(shù)

    獲取逗號(hào)分隔的 term 列表的文檔頻率。詞總是以索引順序返回。如果terms.ttf設(shè)置為 true,則返回它們的總詞頻。如果定義了多個(gè)terms.fl,那么這些統(tǒng)計(jì)數(shù)據(jù)將在每個(gè)請(qǐng)求的字段中為每個(gè)詞返回。

    例: terms.list=termA,termB,termC

  • terms.limit 參數(shù)

    指定要返回的最大 term 數(shù)。默認(rèn)是10。如果限制設(shè)置為小于0的數(shù)字,則不執(zhí)行最大限制。雖然這不是必需的,但是這個(gè)參數(shù)或者terms.upper必須被定義。

    例: terms.limit=20

  • terms.lower 參數(shù)

    指定開始的 term。如果未指定,則使用空字符串,從而導(dǎo)致 Solr 從字段的開始處開始。

    例: terms.lower=orange

  • terms.lower.incl 參數(shù)

    如果設(shè)置為 true,則包含下限項(xiàng)(在結(jié)果中指定terms.lower)。

    例: terms.lower.incl=false

  • terms.mincount 參數(shù)

    指定要返回的最小文檔頻率,以便將術(shù)語包含在查詢響應(yīng)中。結(jié)果包括小數(shù)(即 >= mincount)。

    例: terms.mincount=5

  • terms.maxcount 參數(shù)

    指定一個(gè) term,為了包含在查詢響應(yīng)中而必須具有的最大文檔頻率。默認(rèn)設(shè)置是-1,它不設(shè)置上限。結(jié)果包含 maxcount(即<= maxcount)。

    例: terms.maxcount=25

  • terms.prefix 參數(shù)

    限制匹配以指定字符串開頭的 term。

    例: terms.prefix=inter

  • terms.raw 參數(shù)

    如果設(shè)置為 true,則返回索引項(xiàng)的原始字符,而不管其是否可讀。例如,索引形式的數(shù)字是不可讀的。

    例: terms.raw=true

  • terms.regex 參數(shù)

    限制符合正則表達(dá)式的條件。

    例: terms.regex=.*pedist

  • terms.regex.flag 參數(shù)

    定義一個(gè) Java 正則表達(dá)式標(biāo)志,用于計(jì)算terms.regex定義的表達(dá)式。有關(guān)每個(gè)標(biāo)志的詳細(xì)信息,請(qǐng)參見:http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html。有效的選項(xiàng)是:

    • case_insensitive

    • comments

    • multiline

    • literal

    • dotall

    • unicode_case

    • canon_eq

    • unix_lines

      例: terms.regex.flag=case_insensitive

  • terms.stats 參數(shù)

    在結(jié)果中包含索引統(tǒng)計(jì)信息。目前只返回一個(gè)集合的 numDocs。當(dāng)與terms.list結(jié)合時(shí)它提供足夠的信息來計(jì)算術(shù)語列表的逆文件頻率(IDF)。

  • terms.sort 參數(shù)

    定義如何對(duì)返回的條件進(jìn)行排序。有效選項(xiàng)count按頻率排序,首先選擇最高頻率,或index按索引順序排序。

    例: terms.sort=index

  • terms.ttf 參數(shù)

    如果設(shè)置為 true,那么同時(shí)返回df(docFreq)和ttf(totalTermFreq)統(tǒng)計(jì)信息,在terms.list請(qǐng)求 term 中。在這種情況下,響應(yīng)格式是:

    <lst name="terms">
      <lst name="field">
        <lst name="termA">
          <long name="df">22</long>
          <long name="ttf">73</long>
        </lst>
      </lst>
    </lst>
  • terms.upper 參數(shù)

    指定要停止的術(shù)語。雖然此參數(shù)不是必需的,但是該參數(shù)或terms.limit必須定義。

    例: terms.upper=plum

  • terms.upper.incl 參數(shù)

    如果設(shè)置為 true,則結(jié)果集合中將包含上限項(xiàng)目。默認(rèn)值是 false。

    例: terms.upper.incl=true

對(duì) term 請(qǐng)求的回應(yīng)是 term 及其文檔頻率值的列表。

TermsComponent組件示例

以下所有示例查詢均適用于 Solr 的 “bin / solr -e techproducts” 示例。

如何獲得前10 的排序

該查詢請(qǐng)求名稱字段中的前十個(gè) term:

http://localhost:8983/solr/techproducts/terms?terms.fl=name&wt=xml

結(jié)果如下:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">2</int>
  </lst>
  <lst name="terms">
    <lst name="name">
      <int name="one">5</int>
      <int name="184">3</int>
      <int name="1gb">3</int>
      <int name="3200">3</int>
      <int name="400">3</int>
      <int name="ddr">3</int>
      <int name="gb">3</int>
      <int name="ipod">3</int>
      <int name="memory">3</int>
      <int name="pc">3</int>
    </lst>
  </lst>
</response>

從字母 "a" 開始獲取前10 的 term

這個(gè)查詢按索引順序(而不是按文檔數(shù)計(jì)算的前10個(gè)項(xiàng))請(qǐng)求名稱字段中的前十個(gè)項(xiàng):

http://localhost:8983/solr/techproducts/terms?terms.fl=name&terms.lower=a&terms.sort=index&wt=xml

結(jié)果如下:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
  </lst>
  <lst name="terms">
    <lst name="name">
      <int name="a">1</int>
      <int name="all">1</int>
      <int name="apple">1</int>
      <int name="asus">1</int>
      <int name="ata">1</int>
      <int name="ati">1</int>
      <int name="belkin">1</int>
      <int name="black">1</int>
      <int name="british">1</int>
      <int name="cable">1</int>
    </lst>
  </lst>
</response>

SolrJ 調(diào)用

    SolrQuery query = new SolrQuery();
    query.setRequestHandler("/terms");
    query.setTerms(true);
    query.setTermsLimit(5);
    query.setTermsLower("s");
    query.setTermsPrefix("s");
    query.addTermsField("terms_s");
    query.setTermsMinCount(1);

    QueryRequest request = new QueryRequest(query);
    List<Term> terms = request.process(getSolrClient()).getTermsResponse().getTerms("terms_s");

將 TermsComponent 組件用于自動(dòng)建議功能

如果 Suggester 不符合您的需求,則可以使用 Solr 中的 Terms 組件為您自己的搜索應(yīng)用程序構(gòu)建一個(gè)類似的功能。只需提交一個(gè)查詢,指定用戶鍵入的前綴的任何字符。例如,如果用戶輸入“at”,則搜索引擎的接口將提交以下查詢:

http://localhost:8983/solr/techproducts/terms?terms.fl=name&terms.prefix=at&wt=xml

結(jié)果如下:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
  </lst>
  <lst name="terms">
    <lst name="name">
      <int name="ata">1</int>
      <int name="ati">1</int>
    </lst>
  </lst>
</response>

您可以使用參數(shù) omitHeader=true 從查詢響應(yīng)中省略響應(yīng)頭,就像在這個(gè)例子中一樣,它也以 JSON 格式返回響應(yīng):

http://localhost:8983/solr/techproducts/terms?terms.fl=name&terms.prefix=at&omitHeader=true

結(jié)果如下:

{
  "terms": {
    "name": [
      "ata",
      1,
      "ati",
      1
    ]
  }
}

分布式搜索支持

TermsComponent 也支持分布式索引。對(duì)于 /terms 請(qǐng)求處理程序,您必須提供以下兩個(gè)參數(shù):

  • shards 參數(shù)

    指定分布式索引配置中的分片。有關(guān)分布式索引的更多信息,請(qǐng)參見使用索引分片的分布式搜索。

  • shards.qt 參數(shù)

    指定 Solr 用于請(qǐng)求分片的請(qǐng)求處理程序。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)