(七)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。

最新文章

  1. configure Git to accept a particular self-signed server certificate for a particular https remote
  2. ExtJS6 自适应浏览器窗口大小
  3. git本地提交到远程仓库命令
  4. mouseover和mouseout、mouseenter和mouseleave
  5. Nginx提示502和504错误的解决方案
  6. Android java取得当前日期增加一天或多天
  7. shell编程之sleep的运用
  8. Delphi对于控件的SuperClassing(封装并扩展Button,使之变成TButton)
  9. Android 清除canvas 笔迹代码
  10. Java7 switch新特性
  11. Nuget 学习三
  12. Atom编辑器之加快React开发的插件汇总
  13. 启动关闭zookeeper集群的脚本
  14. [poj1068]Parencodings_模拟
  15. 利用JDBC工具类 模拟用户登录!
  16. Spring从认识到细化了解
  17. 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)
  18. 大数据python词频统计之本地分发-file
  19. Ant打包可运行的Jar包(加入第三方jar包)
  20. day5 python学习

热门文章

  1. Charles的HTTPS抓包方法及原理,下载安装ssl/https证书
  2. 利用velocity.js将svg动起来
  3. Unity3d设置QualitySettings为Beautiful Xcode发布错误
  4. lodash map
  5. AND、OR运算符的组合使用
  6. ViewPager中Fragment无法显示的问题
  7. S2S3H4 整合代码示例
  8. JSON——JavaScript 中的使用
  9. mongoDB 高级查询之复杂查询$where
  10. ajax+webapi上传图片问题