W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
從某種意義上說,這個搜索組件在整個索引上提供了快速的 field-faceting,不受基本查詢或任何過濾器的限制。返回的文檔頻率是與該詞匹配的文檔數(shù)量,包括任何已被標記為刪除但尚未從索引中刪除的文檔。
默認情況下,TermsComponent組件已在 solrconfig.xml 針對每個集合進行了配置。
定義 Term 搜索組件很簡單:簡單地給它一個名稱并使用 solr.TermsComponent 類。
<searchComponent name="terms" class="solr.TermsComponent"/>
這使得該組件可供使用,但是直到包含在請求處理程序中才會被使用。
TermsComponent 組件包含在 Solr 的現(xiàn)成的請求處理程序中的 /terms 請求處理程序中 - 請參閱 Implicit RequestHandlers。
請注意,此請求處理程序的默認值將參數(shù) “terms” 設置為 true,這允許根據(jù)請求返回條件。參數(shù) “distrib” 被設置為 false,這使得這個處理程序只能在一個 Solr 內(nèi)核上使用。
如果您愿意的話,您可以將這個組件添加到另一個處理程序中,并且在 HTTP 請求中傳遞 “terms = true” 以獲得條件。如果僅在單獨的處理程序中定義它,則在查詢時必須使用該處理程序,以獲取條件而不是將常規(guī)文檔作為結(jié)果。
以下參數(shù)允許您控制返回的 term。如果您想永久設置它們,也可以使用請求處理程序來配置其中的任何一個。或者,您可以將它們添加到查詢請求中。這些參數(shù)是:
如果設置為true
,則啟用條款組件。默認情況下,條款組件處于關閉狀態(tài)(false
)。例: terms=true
指定從中檢索 term 的字段。如果terms=true
,則該參數(shù)是必需的。例: terms.fl=title
獲取逗號分隔的 term 列表的文檔頻率。詞總是以索引順序返回。如果terms.ttf
設置為 true,則返回它們的總詞頻。如果定義了多個terms.fl
,那么這些統(tǒng)計數(shù)據(jù)將在每個請求的字段中為每個詞返回。
例: terms.list=termA,termB,termC
指定要返回的最大 term 數(shù)。默認是10
。如果限制設置為小于0的數(shù)字,則不執(zhí)行最大限制。雖然這不是必需的,但是這個參數(shù)或者terms.upper
必須被定義。
例: terms.limit=20
指定開始的 term。如果未指定,則使用空字符串,從而導致 Solr 從字段的開始處開始。
例: terms.lower=orange
如果設置為 true,則包含下限項(在結(jié)果中指定terms.lower
)。
例: terms.lower.incl=false
指定要返回的最小文檔頻率,以便將術語包含在查詢響應中。結(jié)果包括小數(shù)(即 >= mincount)。
例: terms.mincount=5
指定一個 term,為了包含在查詢響應中而必須具有的最大文檔頻率。默認設置是-1,它不設置上限。結(jié)果包含 maxcount(即<= maxcount)。
例: terms.maxcount=25
限制匹配以指定字符串開頭的 term。
例: terms.prefix=inter
如果設置為 true,則返回索引項的原始字符,而不管其是否可讀。例如,索引形式的數(shù)字是不可讀的。
例: terms.raw=true
限制符合正則表達式的條件。
例: terms.regex=.*pedist
定義一個 Java 正則表達式標志,用于計算terms.regex
定義的表達式。有關每個標志的詳細信息,請參見:http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html。有效的選項是:
case_insensitive
comments
multiline
literal
dotall
unicode_case
canon_eq
unix_lines
例: terms.regex.flag=case_insensitive
在結(jié)果中包含索引統(tǒng)計信息。目前只返回一個集合的 numDocs。當與terms.list
結(jié)合時它提供足夠的信息來計算術語列表的逆文件頻率(IDF)。
定義如何對返回的條件進行排序。有效選項count
按頻率排序,首先選擇最高頻率,或index
按索引順序排序。
例: terms.sort=index
如果設置為 true,那么同時返回df
(docFreq)和ttf
(totalTermFreq)統(tǒng)計信息,在terms.list
請求 term 中。在這種情況下,響應格式是:
<lst name="terms">
<lst name="field">
<lst name="termA">
<long name="df">22</long>
<long name="ttf">73</long>
</lst>
</lst>
</lst>
指定要停止的術語。雖然此參數(shù)不是必需的,但是該參數(shù)或terms.limit
必須定義。
例: terms.upper=plum
如果設置為 true,則結(jié)果集合中將包含上限項目。默認值是 false。
例: terms.upper.incl=true
對 term 請求的回應是 term 及其文檔頻率值的列表。
以下所有示例查詢均適用于 Solr 的 “bin / solr -e techproducts” 示例。
該查詢請求名稱字段中的前十個 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>
這個查詢按索引順序(而不是按文檔數(shù)計算的前10個項)請求名稱字段中的前十個項:
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>
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");
如果 Suggester 不符合您的需求,則可以使用 Solr 中的 Terms 組件為您自己的搜索應用程序構建一個類似的功能。只需提交一個查詢,指定用戶鍵入的前綴的任何字符。例如,如果用戶輸入“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 從查詢響應中省略響應頭,就像在這個例子中一樣,它也以 JSON 格式返回響應:
http://localhost:8983/solr/techproducts/terms?terms.fl=name&terms.prefix=at&omitHeader=true
結(jié)果如下:
{
"terms": {
"name": [
"ata",
1,
"ati",
1
]
}
}
TermsComponent 也支持分布式索引。對于 /terms 請求處理程序,您必須提供以下兩個參數(shù):
指定分布式索引配置中的分片。有關分布式索引的更多信息,請參見使用索引分片的分布式搜索。
指定 Solr 用于請求分片的請求處理程序。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: