- 浏览: 1053154 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
分别是关于分词和分页的知识,虽然当成插曲写,但是其内容还是比较重要的,因为那些知识在实际的运用以及开发中用的还是比较常见,所以还是要用心的了解一下。
散仙今天要写的是关于过滤方面的知识,也就是Filter,如果了解Solr的朋友们,肯定都会知道Solr里面fq这个参数,这个参数的作用其实就是lucene里面的过滤,对一些q参数查询的结果集,做过滤或者限制返回一些我们需要的内容,可以理解成缩小搜索空间的一种策略。
在这里散仙先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤返回的结果集不带评分操作,而使用Query返回的结果都是带相关性评分的,所以当我们如果有一些跟评分操作没有关系的业务,优先使用Filter操作,将会获取更好的性能,其实这也是Solr里面的q参数跟fq参数的区别。
下面,开始进入正题,在这之前,散仙还是喜欢老生常谈的先来了解一下Lucene里面有关于Filter的整体知识
下面,我们来看下具体的在代码里怎么实现,先来看下我们的测试数据
Java代码 复制代码 收藏代码
1.id score bookname ename type price date
2.1 1 飘渺之旅 pmzl 小说 52.23 201005
3.2 1 三国演义 sgyy 小说 36.13 201207
4.3 1 数据库实战 sjksz 技术 77.13 200811
5.4 1 编程宝典 bcbd 技术 100.3 200501
6.5 1 职场关系论 zcgxl 职场 36.59 200501
7.6 1 健康生活 jksh 生活 20.47 200008
8.7 1 看清本质 kqbz 社会 10.37 201004
9.8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.//使用过滤器 最后一个为true时包含边界部分,为false时不包含边界部分
2. //倒数第二个为true时,包含查询边界,为false时不包含
3. TermRangeFilter filter=new TermRangeFilter("ename", new BytesRef("h"), new BytesRef("n"), true, true);
4. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.6 1 健康生活 jksh 生活 20.47 200008
2.7 1 看清本质 kqbz 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.NumericRangeFilter<Double> filter=NumericRangeFilter.newDoubleRange("price", 10D, 40D, true, false);
2. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.2 1 三国演义 sgyy 小说 36.13 201207
2.5 1 职场关系论 zcgxl 职场 36.59 200501
3.6 1 健康生活 jksh 生活 20.47 200008
4.7 1 看清本质 kqbz 社会 10.37 201004
5.8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.//使用缓存过滤
2. Filter filter=FieldCacheRangeFilter.newDoubleRange("price", 20D, 50D, true, true);
3. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.2 1 三国演义 sgyy 小说 36.13 201207
2.5 1 职场关系论 zcgxl 职场 36.59 200501
3.6 1 健康生活 jksh 生活 20.47 200008
核心代码
Java代码 复制代码 收藏代码
1.// 缓存域过滤特定的类别
2. Filter filter=new FieldCacheTermsFilter("type", new String[]{"技术","社会"});
3. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.3 1 数据库实战 sjksz 技术 77.13 200811
2.4 1 编程宝典 bcbd 技术 100.3 200501
3.7 1 看清本质 kqbz 社会 10.37 201004
4.8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.//使用QueryWrapperFilter类包装一个Query
2. QueryWrapperFilter filter=new QueryWrapperFilter(new TermQuery(new Term("type", "技术")));
3. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.3 1 数据库实战 sjksz 技术 77.13 200811
2.4 1 编程宝典 bcbd 技术 100.3 200501
最后我来看下,如何继承Filter基类,来定制我们自己的filter,自定义的Filter,虽然某些时候,功能很强大灵活,但是有几个缺点,我们的了解1,保证是内容不重复的字段,例如主键,如果重复,默认返回第一个作为结果集显示2,保证不能被分词的内容,如果是分词的字段,则可能会出现一些不正确的结果。
自定义Filter类
Java代码 复制代码 收藏代码
1.package com.sanjiesanxian.test;
2.
3.import java.io.IOException;
4.import java.util.BitSet;
5.
6.import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
7.import org.apache.lucene.index.AtomicReaderContext;
8.import org.apache.lucene.index.DocsEnum;
9.import org.apache.lucene.index.Term;
10.import org.apache.lucene.search.DocIdSet;
11.import org.apache.lucene.search.Filter;
12.import org.apache.lucene.util.AttributeSource;
13.import org.apache.lucene.util.Bits;
14.import org.apache.lucene.util.DocIdBitSet;
15.import org.apache.lucene.util.FixedBitSet;
16.import org.apache.lucene.util.OpenBitSet;
17.
18./***
19. *^_^ ^_^ ^_^
20. * QQ交流探讨群:324714439
21. * 自定义过滤器
22. * @author 三劫散仙
23. * */
24.public class MyCustomFilter extends Filter{
25.
26. public MyCustomFilter() {
27. // TODO Auto-generated constructor stub
28. }
29.
30. private String[] terms;//限制返回的数据字典
31. public MyCustomFilter(String ...terms) {
32. // TODO Auto-generated constructor stub
33. this.terms=terms;
34. }
35. @Override
36. public DocIdSet getDocIdSet(AtomicReaderContext arg0, Bits arg1)
37. throws IOException {
38. FixedBitSet bits=new FixedBitSet(arg0.reader().maxDoc()) ;//获取没有所有的docid包括未删除的
39. int base=arg0.docBase;//段的相对基数,保证多个段时相对位置正确
40. //int limit=base+arg0.reader().maxDoc();//计算最大限制值
41. for(String s:terms){
42. DocsEnum doc=arg0.reader().termDocsEnum(new Term("id", s));//必须是唯一的不重复
43. //保证是单个不重复的term,如果重复的话,默认会取第一个作为返回结果集,分词后的term也不适用自定义term
44. if(doc.nextDoc()!=-1){
45. bits.set(doc.docID());//对付符合条件约束的docid循环添加到bits里面
46. }
47. }
48. return bits;
49. }
50.
51.
52.
53.
54.
55.
56.
57.
58.}
测试查询代码
Java代码 复制代码 收藏代码
1.MyCustomFilter filter=new MyCustomFilter("3","5","2");//随意指定1之多个需要过滤的项
2.TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);
输出结果
Java代码 复制代码 收藏代码
1.2 1 三国演义 sgyy 小说 36.13 201207
2.3 1 数据库实战 sjksz 技术 77.13 200811
3.5 1 职场关系论 zcgxl 职场 36.59 200501
自定义过滤器虽然有缺点,但是某些场景下却能发挥很灵活的作用,特别是对没有分词的字段进行过滤操作。
关于Lucene过滤部分的使用,散仙就介绍到这里,这些功能其实没什么难的,弄清理论,在练习几遍,就能很快学会了
散仙今天要写的是关于过滤方面的知识,也就是Filter,如果了解Solr的朋友们,肯定都会知道Solr里面fq这个参数,这个参数的作用其实就是lucene里面的过滤,对一些q参数查询的结果集,做过滤或者限制返回一些我们需要的内容,可以理解成缩小搜索空间的一种策略。
在这里散仙先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤返回的结果集不带评分操作,而使用Query返回的结果都是带相关性评分的,所以当我们如果有一些跟评分操作没有关系的业务,优先使用Filter操作,将会获取更好的性能,其实这也是Solr里面的q参数跟fq参数的区别。
下面,开始进入正题,在这之前,散仙还是喜欢老生常谈的先来了解一下Lucene里面有关于Filter的整体知识
下面,我们来看下具体的在代码里怎么实现,先来看下我们的测试数据
Java代码 复制代码 收藏代码
1.id score bookname ename type price date
2.1 1 飘渺之旅 pmzl 小说 52.23 201005
3.2 1 三国演义 sgyy 小说 36.13 201207
4.3 1 数据库实战 sjksz 技术 77.13 200811
5.4 1 编程宝典 bcbd 技术 100.3 200501
6.5 1 职场关系论 zcgxl 职场 36.59 200501
7.6 1 健康生活 jksh 生活 20.47 200008
8.7 1 看清本质 kqbz 社会 10.37 201004
9.8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.//使用过滤器 最后一个为true时包含边界部分,为false时不包含边界部分
2. //倒数第二个为true时,包含查询边界,为false时不包含
3. TermRangeFilter filter=new TermRangeFilter("ename", new BytesRef("h"), new BytesRef("n"), true, true);
4. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.6 1 健康生活 jksh 生活 20.47 200008
2.7 1 看清本质 kqbz 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.NumericRangeFilter<Double> filter=NumericRangeFilter.newDoubleRange("price", 10D, 40D, true, false);
2. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.2 1 三国演义 sgyy 小说 36.13 201207
2.5 1 职场关系论 zcgxl 职场 36.59 200501
3.6 1 健康生活 jksh 生活 20.47 200008
4.7 1 看清本质 kqbz 社会 10.37 201004
5.8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.//使用缓存过滤
2. Filter filter=FieldCacheRangeFilter.newDoubleRange("price", 20D, 50D, true, true);
3. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.2 1 三国演义 sgyy 小说 36.13 201207
2.5 1 职场关系论 zcgxl 职场 36.59 200501
3.6 1 健康生活 jksh 生活 20.47 200008
核心代码
Java代码 复制代码 收藏代码
1.// 缓存域过滤特定的类别
2. Filter filter=new FieldCacheTermsFilter("type", new String[]{"技术","社会"});
3. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.3 1 数据库实战 sjksz 技术 77.13 200811
2.4 1 编程宝典 bcbd 技术 100.3 200501
3.7 1 看清本质 kqbz 社会 10.37 201004
4.8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
Java代码 复制代码 收藏代码
1.//使用QueryWrapperFilter类包装一个Query
2. QueryWrapperFilter filter=new QueryWrapperFilter(new TermQuery(new Term("type", "技术")));
3. TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
Java代码 复制代码 收藏代码
1.3 1 数据库实战 sjksz 技术 77.13 200811
2.4 1 编程宝典 bcbd 技术 100.3 200501
最后我来看下,如何继承Filter基类,来定制我们自己的filter,自定义的Filter,虽然某些时候,功能很强大灵活,但是有几个缺点,我们的了解1,保证是内容不重复的字段,例如主键,如果重复,默认返回第一个作为结果集显示2,保证不能被分词的内容,如果是分词的字段,则可能会出现一些不正确的结果。
自定义Filter类
Java代码 复制代码 收藏代码
1.package com.sanjiesanxian.test;
2.
3.import java.io.IOException;
4.import java.util.BitSet;
5.
6.import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
7.import org.apache.lucene.index.AtomicReaderContext;
8.import org.apache.lucene.index.DocsEnum;
9.import org.apache.lucene.index.Term;
10.import org.apache.lucene.search.DocIdSet;
11.import org.apache.lucene.search.Filter;
12.import org.apache.lucene.util.AttributeSource;
13.import org.apache.lucene.util.Bits;
14.import org.apache.lucene.util.DocIdBitSet;
15.import org.apache.lucene.util.FixedBitSet;
16.import org.apache.lucene.util.OpenBitSet;
17.
18./***
19. *^_^ ^_^ ^_^
20. * QQ交流探讨群:324714439
21. * 自定义过滤器
22. * @author 三劫散仙
23. * */
24.public class MyCustomFilter extends Filter{
25.
26. public MyCustomFilter() {
27. // TODO Auto-generated constructor stub
28. }
29.
30. private String[] terms;//限制返回的数据字典
31. public MyCustomFilter(String ...terms) {
32. // TODO Auto-generated constructor stub
33. this.terms=terms;
34. }
35. @Override
36. public DocIdSet getDocIdSet(AtomicReaderContext arg0, Bits arg1)
37. throws IOException {
38. FixedBitSet bits=new FixedBitSet(arg0.reader().maxDoc()) ;//获取没有所有的docid包括未删除的
39. int base=arg0.docBase;//段的相对基数,保证多个段时相对位置正确
40. //int limit=base+arg0.reader().maxDoc();//计算最大限制值
41. for(String s:terms){
42. DocsEnum doc=arg0.reader().termDocsEnum(new Term("id", s));//必须是唯一的不重复
43. //保证是单个不重复的term,如果重复的话,默认会取第一个作为返回结果集,分词后的term也不适用自定义term
44. if(doc.nextDoc()!=-1){
45. bits.set(doc.docID());//对付符合条件约束的docid循环添加到bits里面
46. }
47. }
48. return bits;
49. }
50.
51.
52.
53.
54.
55.
56.
57.
58.}
测试查询代码
Java代码 复制代码 收藏代码
1.MyCustomFilter filter=new MyCustomFilter("3","5","2");//随意指定1之多个需要过滤的项
2.TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);
输出结果
Java代码 复制代码 收藏代码
1.2 1 三国演义 sgyy 小说 36.13 201207
2.3 1 数据库实战 sjksz 技术 77.13 200811
3.5 1 职场关系论 zcgxl 职场 36.59 200501
自定义过滤器虽然有缺点,但是某些场景下却能发挥很灵活的作用,特别是对没有分词的字段进行过滤操作。
关于Lucene过滤部分的使用,散仙就介绍到这里,这些功能其实没什么难的,弄清理论,在练习几遍,就能很快学会了
发表评论
-
elasticsearch异常信息汇总
2017-11-06 09:34 15471.IndexMissingException 异常信息 ... -
Elasticsearch的架构
2018-03-22 10:30 509为什么要学习架构? Elasticsearch的一些架构 ... -
怎么在Ubuntu上打开端口
2017-10-21 20:45 0Netstat -tln 命令是用来查看linux的端口使用情 ... -
Elasticsearch工作原理
2018-03-22 10:30 450一、关于搜索引擎 各 ... -
Elasticsearch的路由(Routing)特性
2017-10-11 10:41 0Elasticsearch路由机制介 ... -
Elasticsearch中的segment理解
2017-10-11 09:58 1889在Elasticsearch中, 需要搞清楚几个名词,如se ... -
Elasticsearch的路由(Routing)特性
2017-09-28 16:52 618Elasticsearch路由机制介绍 Elastics ... -
Elasticsearch 的 Shard 和 Segment
2017-09-28 16:05 1200Shard(分片) 一个Shard就是一个Lu ... -
开源大数据查询分析引擎现状
2017-09-22 03:04 832大数据查询分析是云计算中核心问题之一,自从Google在20 ... -
大数据处理方面的 7 个开源搜索引擎
2017-09-22 03:01 496大数据是一个包括一切 ... -
开源大数据查询分析引擎现状
2017-09-23 11:26 550大数据查询分析是云计算中核心问题之一,自从Google在2 ... -
elasticsearch 把很多类型都放在一个索引下面 会不会导致查询慢
2017-09-25 09:45 984主要看数据量ES索引优 ... -
腾讯大数据Hermes爱马仕的系统
2017-09-23 11:15 992腾讯大数据最近做了几件事,上线了一个官方网站http:// ... -
配置高性能Elasticsearch集群的9个小贴士
2017-09-25 10:02 592Loggly服务底层的很多 ... -
Elasticsearch与Solr
2017-09-25 16:24 552Elasticsearch简介* Elasti ... -
大数据杂谈微课堂|Elasticsearch 5.0新版本的特性与改进
2017-09-26 09:57 808Elastic将在今年秋季的 ... -
ElasticSearch性能优化策略
2017-09-26 09:51 449ElasticSearch性能优化主 ... -
ES索引优化
2017-09-19 20:39 0ES索引优化篇主要从两个方面解决问题,一是索引数据过程;二是 ... -
分词与索引的关系
2017-09-19 20:33 0分词与索引,是中文搜索里最重要的两个技术,而且两者间是密不可 ... -
Elasticsearch中的segment理解
2017-09-19 20:30 0在Elasticsearch中, 需要搞清楚几个名词,如se ...
相关推荐
从压缩包文件 "lucenetest" 来看,我们可以预期里面包含了实现这个简单实例的源代码。这些文件可能包含以下几个部分: 1. **索引创建**:通常会有一个类用于读取数据(如文本文件或数据库记录),然后使用Lucene的`...
本文档是整套的elk学习资源,内容详细 ES5.0新版本特性 1.支持lucene 6.x:索引性能提升 提升25% 磁盘占用少了 2.新增sliced scroll类型:并发...5.新增ingest节点 直接在es中进行简单的过滤 不需要在logstash里面过滤
2. **org目录**:这个目录下的文件主要是ikanalyzer的组织结构,包含类库和接口,例如`org.icat`包,它是ikanalyzer的核心包,里面包含了分词器、过滤器等关键组件。如`Analyzer`接口定义了分词器的基本操作,`...
1. `stopword.dic`:停用词表,包含了在分析文本时通常会被过滤掉的常见词汇,如“的”、“和”等,以减少无效信息对后续处理的影响。 2. `Readme-说明.htm`:通常包含软件的使用指南、注意事项和更新日志,用户...
Elasticsearch是一款强大的开源搜索引擎,它基于Lucene,提供了实时、分布式、全文检索的能力。在本文中,我们将详细介绍如何在Windows上安装Elasticsearch,以及如何安装和配置其插件,特别是ik分词器。 首先,让...
Elasticsearch是一款强大的开源搜索引擎,基于Lucene库构建,广泛应用于大数据分析、日志收集、实时搜索等场景。它以其高效、可扩展和易用性而受到开发者们的喜爱。本项目"elasticsearch-tool"显然是一个与Elastic...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...