(七)solr7之Terms组件的使用

  Terms组件提供访问索引项的字段和每个词相匹配的文档数量。 这可以用于建立一个自动建议特性或任何其他的特性,而这个terms不是搜索或文档级别的水平。快速检索索引顺序是直接使用Lucene的TermEnum来遍历这个terms词典。

在某种意义上,这种搜索组件提供快速field-faceting在整个指数,基本不受限制的查询或任何过滤器。 返回的文档频率是文档的数量相匹配的term,包括任何文件被标记为删除但尚未从索引中删除。

配置Terms组件

默认情况下,Terms组件已经配置solrconfig.xml为每个集合

定义Terms组件

定义terms搜索组件很简单:只需给它一个名称,然后使用的类 solr.TermsComponent

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

但是单单是这样是不可用的,需要配合一个请求处理程序才能正常使用。

请求处理程序中使用的组件

这个 terms组件是包含的条款 /terms 请求处理程序,这是在Solr的开箱即用的请求处理程序——请看 隐式 RequestHandlers

注意,这个请求处理程序设置参数的默认值"terms" 为 true,它允许条件返回请求。 “distrib”参数设置为false,它允许使用这个处理程序只在一个Solr的核心。

你可以将这个组件添加到另一个处理程序,如果你想,并通过 "terms=true" HTTP请求以收回条款。 如果只定义在一个单独的处理程序,查询时必须使用该处理程序为了得到terms,而不是常规的文档作为结果。

Terms组件参数

下面的参数允许您控制Terms的返回。 您还可以配置任何的请求处理程序如果你€™想永久设置它们。 或者,您可以将它们添加到查询请求。 这些参数是:

terms

设置为 true,则开启组件。 默认情况下是false

例子: terms=true

terms.fl

指定字段的检索条件。 terms=true 这个参数是必需的。

例子: terms.fl=title

terms.list

获取文档频率的逗号分隔的列表。 总是在索引顺序返回。 如果 terms.ttf 设置为true,也返回他们的总的term频率。 如果多个 terms.fl 被定义,这些统计的数据将为每一项在每一个请求返回字段。

例子: terms.list=termA,termB,termC

terms.limit

返回指定的最大数量terms。 默认值是 10 。 如果限制设置为小于0,然后没有最大限度地执行。 虽然这不是必需的,或者这个参数 terms.upper 必须定义。

例子: terms.limit = 20

terms.lower

指定的term。 如果未指定,则使用空字符串,导致Solr从头开始的。

例子: terms.lower=orange

terms.lower.incl

如果设置为true,包括下界(指定 terms.lower 的结果集。

例子: terms.lower.incl = false

terms.mincount

指定最低文档频率返回为了一个term被包括在一个查询响应。 结果是包容性的mincount(> = mincount)。

例子: terms.mincount = 5

terms.maxcount

指定的最大文档频率项必须被包括在一个查询响应。 默认设置为 -1,这集没有上限。 结果是包容性的maxcount(< = maxcount)。

例子: terms.maxcount = 25

terms.prefix

从指定的字符串匹配以***为前缀的。

例子:terms.prefix=inter

terms.raw

如果设置为true,返回原始字符的索引term,不管它是否可读。 例如,数字数据的索引形式不是人类可读的。

例子: terms.raw = true

terms.regex

限制条件匹配的正则表达式匹配。

例子: * pedist terms.regex =

terms.regex.flag

定义了一个Java正则表达式国旗使用在评估定义的正则表达式 terms.regex 。 看到 http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html每个国旗的详情。 有效的选项是:

  • case_insensitive

  • 评论

  • 多行

  • 文字

  • dotall

  • unicode_case

  • canon_eq

  • unix_lines

    例子: terms.regex.flag = case_insensitive

    terms.stats

    包括索引统计信息的结果。 目前只返回 numDocs 对于一个集合。 当结合 terms.list 它提供了足够的信息来计算逆文档频率(IDF)术语的列表。

terms.sort

定义了如何返回的terms。 有效的选项是 count,这类词的频率,频率最高的词,或 index 在指数排序顺序。

例子: terms.sort=index

terms.ttf

如果设置为true ,返回 df (docFreq)和 ttf 为每个请求项(totalTermFreq)统计 terms.list 。 在这种情况下,响应格式是:

<lst name="terms">
<lst name="field">
<lst name="termA">
<long name="df"></long>
<long name="ttf"></long>
</lst>
</lst>
</lst>
terms.upper

指定要停在这个词。 虽然不需要此参数,这个参数或 terms.limit 必须定义。

例子: terms.upper=plum

terms.upper.incl

如果设置为true,上界项是包含在结果集。默认是false。

例子: terms.upper.incl = true

terms请求的响应是一个术语及其文档频率值的列表。

你可能也会感兴趣的 TermsComponent javadoc

Terms组件的例子

请求查询的十个terms名称的字段:

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

结果:

<response>
<lst name="responseHeader">
<int name="status"></int>
<int name="QTime"></int>
</lst>
<lst name="terms">
<lst name="name">
<int name="one"></int>
<int name=""></int>
<int name="1gb"></int>
<int name=""></int>
<int name=""></int>
<int name="ddr"></int>
<int name="gb"></int>
<int name="ipod"></int>
<int name="memory"></int>
<int name="pc"></int>
</lst>
</lst>
</response>

得到前十项以字母“a”开始

请求查询的前十个terms名称的字段是按照索引顺序(而不是排名前十位的结果文档数):

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

结果:

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

SolrJ调用

 SolrQuery query = new SolrQuery();
query.setRequestHandler("/terms");
query.setTerms(true);
query.setTermsLimit();
query.setTermsLower("s");
query.setTermsPrefix("s");
query.addTermsField("terms_s");
query.setTermsMinCount(); QueryRequest request = new QueryRequest(query);
List<Term> terms = request.process(getSolrClient()).getTermsResponse().getTerms("terms_s");

使用Terms组件自动建议特性

如果 Suggester不能满足您的需求,您可以使用Solr的Terms组成部分来构建自己的搜索应用程序类似的功能。 只需提交一个查询指定用户已经输入的任何字符作为前缀。 例如,如果用户输入的"at",搜索引擎的接口将提交以下查询:

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

结果:

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

您可以使用参数 omitHeader = true 省略了查询响应的响应头,像在这个例子中,也以JSON格式返回响应:

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

结果:

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

分布式搜索支持

TermsComponent还支持分布式索引。 为 /terms 请求处理程序,您必须提供以下两个参数:

shards

分布式索引配置中指定了碎片。 关于分布式索引的更多信息,请参阅 分布式搜索和索引分片

shards.qt

指定请求的请求处理程序使用shards。

(七)solr7之Terms组件的使用的更多相关文章

  1. Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件

    第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依 ...

  2. reactjs入门到实战(七)---- React的组件的生命周期

    React的组件的生命周期有三个状态分别是:挂载(生产组件示例化.准备挂载到页面.挂载到页面).更新(更新值.更新DOM).和卸载(卸载后). >>>其他     getInitia ...

  3. [ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38487519 本文作者:sushengmiyan ------------------ ...

  4. IT轮子系列(七)——winform 版本更新组件

    前言 最近做了一个winform客户端的项目,里面有一个功能是版本更新.以前也有写过,可忘了具体的逻辑.网上也有介绍用发布模式进行更新的,自己尝试后没有成功,提示“vba证书无效”.于是,费了些时间搜 ...

  5. 第七章:四大组件之Service

    Service是Android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行,并且可以和其他组件进行交互.Service是没有界面的长生命周期的代码.Servic ...

  6. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  7. GUI的最终选择 Tkinter(七):菜单Menu组件、Menubutton组件、OptionMenu组件

    Menu组件 今天说的Menu组件就是一些菜单组件,开始点点点... Tkinter提供了一个Menu组件,可以实现顶级菜单,下拉菜单和弹出菜单.由于底层是代码实现和优化的,所以不太建议通过按钮和其他 ...

  8. 第七篇 -- 常用界面组件的使用(QSlider和QProgressBar)

    首先画个图 ui_proBar.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'ui_ ...

  9. 七、OpenStack—dashboard组件安装

    1.安装包# yum install openstack-dashboard2.编辑 /etc/openstack-dashboard/local_settings 文件 需要更改的几处内容如下: ) ...

随机推荐

  1. 微信小程序 - 回到自己位置(map)

    演示效果: 图片资源 index.js /** * 回到自己位置,在cover-image上绑定点击事件即可. */ clickcontrol(e) { let mpCtx = wx.createMa ...

  2. MySQL触发器 trigger之after与before区分

    after:是先完毕数据的增删改,然后再触发.触发的语句晚于监视的增删改,无法影响前面的增删修改作.也就是说先插入订单记录.再更新商品数量.当商品数量少于订单数量时造成爆库. before:先完毕触发 ...

  3. 【Java】Java_09 类型转换

    1.自动类型转换 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型.在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失. 特例: 可以将整型常量直接赋 ...

  4. POJ1088 动态规划

    题意: id=1088">题目链接 解答: 这个题目和最长子序列什么的极为类似.只是之前都是一维,如今变成二维的了.仅此而已.因此我们能够想办法把它先变成一维的. 先用一个结构体存储这 ...

  5. 如何在谷歌浏览器中查看Axure做的原型HTML

    Axure RP Pro可谓是非常方便.好用的一款软件,因为它不仅能绘制出详细的产品构思,也能生成浏览器格式的产品原型.但如果想把原型拿给客户查看,需要看产品画的原型图时,但是打不开的话就悲剧了.经常 ...

  6. linux phpredisAdmin安装步骤

    1:linux安装apache环境, 这一步可以不用安装plsql http://www.cnblogs.com/lufangtao/archive/2012/12/30/2839679.html 2 ...

  7. 对于一个IE8兼容性问题的反思

    近期做了一个需求,功能非常easy,把用户的优惠券数量读取出来,然后显示到"用户中心"上.开发完毕后.别的浏览器正常.可是到IE8上就不行了.并且,按下F12之后,就又能够载入出来 ...

  8. Atitit. atiOrder   Order 订单管理框架的设计

    Atitit. atiOrder   Order 订单管理框架的设计 1. Order 订单处理流程1 2. code2 3. Ref7 1. Order 订单处理流程 if(userSvr.isNo ...

  9. python模块学习之logging

    filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中. filemode:文件打开方式,在指定了filename时使用这个 ...

  10. phpExcel常用方法详解【附有php导出excel加超级链接】

    phpExcel常用方法详解[附有php导出excel加超级链接] 发表于4年前(-- :) 阅读() | 评论() 0人收藏此文章, 我要收藏 赞0 http://www.codeplex.com/ ...