W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
從某種意義上說,這個(gè)搜索組件在整個(gè)索引上提供了快速的 field-faceting,不受基本查詢或任何過濾器的限制。返回的文檔頻率是與該詞匹配的文檔數(shù)量,包括任何已被標(biāo)記為刪除但尚未從索引中刪除的文檔。
默認(rèn)情況下,TermsComponent組件已在 solrconfig.xml 針對(duì)每個(gè)集合進(jìn)行了配置。
定義 Term 搜索組件很簡(jiǎn)單:簡(jiǎn)單地給它一個(gè)名稱并使用 solr.TermsComponent 類。
<searchComponent name="terms" class="solr.TermsComponent"/>
這使得該組件可供使用,但是直到包含在請(qǐng)求處理程序中才會(huì)被使用。
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é)果。
以下參數(shù)允許您控制返回的 term。如果您想永久設(shè)置它們,也可以使用請(qǐng)求處理程序來配置其中的任何一個(gè)?;蛘?,您可以將它們添加到查詢請(qǐng)求中。這些參數(shù)是:
如果設(shè)置為true
,則啟用條款組件。默認(rèn)情況下,條款組件處于關(guān)閉狀態(tài)(false
)。例: terms=true
指定從中檢索 term 的字段。如果terms=true
,則該參數(shù)是必需的。例: terms.fl=title
獲取逗號(hào)分隔的 term 列表的文檔頻率。詞總是以索引順序返回。如果terms.ttf
設(shè)置為 true,則返回它們的總詞頻。如果定義了多個(gè)terms.fl
,那么這些統(tǒng)計(jì)數(shù)據(jù)將在每個(gè)請(qǐng)求的字段中為每個(gè)詞返回。
例: terms.list=termA,termB,termC
指定要返回的最大 term 數(shù)。默認(rèn)是10
。如果限制設(shè)置為小于0的數(shù)字,則不執(zhí)行最大限制。雖然這不是必需的,但是這個(gè)參數(shù)或者terms.upper
必須被定義。
例: terms.limit=20
指定開始的 term。如果未指定,則使用空字符串,從而導(dǎo)致 Solr 從字段的開始處開始。
例: terms.lower=orange
如果設(shè)置為 true,則包含下限項(xiàng)(在結(jié)果中指定terms.lower
)。
例: terms.lower.incl=false
指定要返回的最小文檔頻率,以便將術(shù)語包含在查詢響應(yīng)中。結(jié)果包括小數(shù)(即 >= mincount)。
例: terms.mincount=5
指定一個(gè) term,為了包含在查詢響應(yīng)中而必須具有的最大文檔頻率。默認(rèn)設(shè)置是-1,它不設(shè)置上限。結(jié)果包含 maxcount(即<= maxcount)。
例: terms.maxcount=25
限制匹配以指定字符串開頭的 term。
例: terms.prefix=inter
如果設(shè)置為 true,則返回索引項(xiàng)的原始字符,而不管其是否可讀。例如,索引形式的數(shù)字是不可讀的。
例: terms.raw=true
限制符合正則表達(dá)式的條件。
例: terms.regex=.*pedist
定義一個(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
在結(jié)果中包含索引統(tǒng)計(jì)信息。目前只返回一個(gè)集合的 numDocs。當(dāng)與terms.list
結(jié)合時(shí)它提供足夠的信息來計(jì)算術(shù)語列表的逆文件頻率(IDF)。
定義如何對(duì)返回的條件進(jìn)行排序。有效選項(xiàng)count
按頻率排序,首先選擇最高頻率,或index
按索引順序排序。
例: terms.sort=index
如果設(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>
指定要停止的術(shù)語。雖然此參數(shù)不是必需的,但是該參數(shù)或terms.limit
必須定義。
例: terms.upper=plum
如果設(shè)置為 true,則結(jié)果集合中將包含上限項(xiàng)目。默認(rèn)值是 false。
例: terms.upper.incl=true
對(duì) term 請(qǐng)求的回應(yīng)是 term 及其文檔頻率值的列表。
以下所有示例查詢均適用于 Solr 的 “bin / solr -e techproducts” 示例。
該查詢請(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>
這個(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>
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 組件為您自己的搜索應(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ù):
指定分布式索引配置中的分片。有關(guān)分布式索引的更多信息,請(qǐng)參見使用索引分片的分布式搜索。
指定 Solr 用于請(qǐng)求分片的請(qǐng)求處理程序。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: