`
wangxuliangboy
  • 浏览: 210624 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

RangeQuery替代方案

阅读更多

由于需要对数据的范围进行限制,所以就用到了这个类.
Term begin = new Term("field1","418815290");
Term end = new Term("field1","418847590");
RangeQuery query1 = new RangeQuery(begin, end, true);
当转换成BooleanQuery来查询的时候,会生成大于1024个TermQuery..
所以提示:org.apache.lucene.search.BooleanQuery$TooManyClauses

 

1.
ConstantScoreRangeQuery cQuery =new ConstantScoreRangeQuery("number","1","999999",true,true); 
2.

BooleanQuery.setMaxClauseCount(10000000);

3.

通过RangeFilter

RangeFilter filter=new RangeFilter("viewedcount""0000010000","0150000000"truetrue);
IndexSearch.search(Query query,Filter filter),

ConstantScoreRangeQuery其实是通过用RangeFilter来实际这个范围查询的..

RangeFilter的实现方式是通过循环所有的document。先从Range中拿到最小的值的Term。看能不能在所有的document中找到相应的document。如果找不到的话。。就直接跳出循环。。。

如果能找到对应的document。直通过while循环。。那到一个个document.然后取对应Field的值与Range最大范围的值比较。如果小就加入Bits..

 

  if (upperTerm != null) {
  int compare = upperTerm.compareTo(term.text());
                           if ((compare < 0) ||
                                    (!includeUpper && compare==0)) {
                                    break;
                                }
                            }
                            termDocs.seek(enumerator.term());
                            while (termDocs.next()) {
                                bits.set(termDocs.doc());
                            }

Lucene 部分代码         

 

 

另外有一个想法:()

把范围最小的封装成一个TermQuery.

把范围最大的也封装成一个TermQuery..

  TermQuery query=new TermQuery(new Term("number","1"));
  TermQuery query2=new TermQuery(new Term("number","9999"));
  Hits hits1=indexSearcher.search(query);
  Hits hits2=indexSearcher.search(query2);

拿到最小和最大的document id..循环从最小到最大doc id..

 

               

分享到:
评论

相关推荐

    Lucene时间区间搜索

    总之,Lucene在C#中的时间区间搜索是通过构建和执行RangeQuery来实现的,这涉及到索引构建、查询解析、时间值的转换和比较等多个环节。合理地利用这些技术,可以有效地提升数据检索的效率和准确性。在实际应用中,还...

    阿里云存储服务OSS基本概念.docx

    阿里云存储服务 OSS 是一种基于云计算的对象存储服务,提供了高可扩展性、可靠性和安全性的存储解决方案。在 OSS 中,存在多种基本概念,了解这些概念对于使用 OSS 至关重要。 Object 是 OSS 中的基本单元,每个...

    基于kdtree算法的电路板故障检测matlab仿真,含仿真操作录像

    1.版本:matlab2022a,包含仿真操作录像,... [index_vals,dist_vals,vector_vals] = kd_rangequery(tree,point,range) 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。

    【ASP.NET编程知识】ASP.NET MVC5 实现分页查询的示例代码.docx

    ASP.NET MVC5 实现分页查询的示例代码 ASP.NET MVC5 是一个基于 ASP.NET 的Model-View-Controller...ASP.NET MVC5 实现分页查询的示例代码,提供了一个完整的解决方案,能够帮助开发者快速实现数据的分页查询和展示。

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    4.9.6. 范围的查找,支持RangeQuery 13 4.9.7. 现在还不支持SpanQuery 13 4.10. MultiFieldQueryParser类--多域搜索 13 4.11. MultiSearcher类--多个索引搜索 13 4.12. ParalellMultiSearcher类---多线程搜索 14 5. ...

    lucene 4.7.2 Demo

    这需要利用RangeQuery或NumericRangeQuery类来构建相应的查询条件。 排序功能在信息检索中至关重要,Lucene 4.7.2提供了基于文档评分和自定义字段的排序。评分通常基于TF-IDF算法,而字段排序则允许用户根据特定...

    百度林仕鼎:架构设计的一些思考.pdf

    - **Scan/RangeQuery**: 扫描或范围查询,用于获取一定范围内的数据。 **1.3 数据特点** - **Mutable or Not**: 数据是否可变。 - **Size**: 数据大小对存储的选择有直接影响。 - **Data Layout**: 数据布局决定了...

    lucene例子

    支持许多强大的查询类型,比如 PhraseQuery、WildcardQuery、RangeQuery、FuzzyQuery、BooleanQuery 等。 支持解析人们输入的丰富查询表达式。 允许用户使用定制排序、过滤和查询表达式解析扩展搜索行为。 使用基于...

    SpringBoot整合es源码

    包括详细的批量操作 bulk, 批量导入, 查询所有, 分页, termQuery:词条查询, matchQuery:词条分词查询, 模糊查询:WildcardQuery, 模糊查询:regexpQuery, 模糊查询:perfixQuery, 范围查询:rangeQuery, 排序, 布尔...

    Lucene在web项目中的应用

    Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,它提供了完整的搜索解决方案,包括索引构建、搜索功能以及分词处理。在Java Web项目中,Lucene能够帮助开发者实现高效、精确的站内搜索功能,提升用户...

    lucene api

    Lucene支持多种查询类型,如布尔查询(BooleanQuery)、短语查询(PhraseQuery)、范围查询(RangeQuery)等,以及复杂的组合查询。 5. **搜索与评分**:使用Query对象在索引中搜索匹配的文档,Lucene会返回一个...

    树状数组的定义及java编码实现

    4. **区间查询操作**:`rangeQuery(int i, int j)`用于查询区间`[i, j]`的和。 - 参数: - `i`:表示区间的起始位置。 - `j`:表示区间的结束位置。 - 返回值: - `query(j) - query(i - 1)`:表示区间`[i, j]`...

    elasticsearch api的详细讲解,非常详细 有学习价值

    8. **rangeQuery**:用于查询字段中位于自定义分组区间内的数值。 9. **histogramQuery**:执行固定区间递增过程,常用于按照某个数值字段来分组。 10. **dateHistogramQuery**:类似于histogram,但用于日期字段,...

    solr cache部分 中文解释

    4. 分析缓存(FilterCache):缓存查询过滤器的结果,如TermQuery或RangeQuery,以加速过滤操作。它通常用于预加载可能在多个查询中使用的过滤器集合。 5. 预热缓存(QueryResultKeyCache):当新搜索器打开时,...

    ESPractice:SpringBoot+ES+RabbitMQ实现搜索的示例

    没有业务代码干扰,拿来即可用主要包含的内容:ES创建Index Mapping的全过程(包含日期 数组映射,中文分词等)ES对Document的增删改查与业务逻辑的结合ES常用查询(包含boolQuery filter termQuery rangeQuery ...

    ElasticSearch代码实例C#

    ES提供了丰富的查询和过滤条件,如`MatchQuery`、`TermQuery`、`RangeQuery`等。例如,查询`field`字段包含特定值的文档: ```csharp var response = client.Search(s =&gt; s .Query(q =&gt; q .Match(m =&gt; m ....

    lucene高级应用

    2. 使用Filter:通过TermQuery、RangeQuery或自定义Filter,可以限制搜索范围,减少不必要的计算,提高查询效率。 3. Boosting:对重要的关键词进行加权,可以提升相关度高的结果排名。 4. 使用缓存:对于频繁执行...

    C# 判断时间段是否相交的实现方法

    var rangeQuery = Query.Or(rangeTo, rangeFrom, Query.And(Query&lt;TCollection&gt;.GTE(fromExp, From), Query&lt;TCollection&gt;.LTE(toExp, To))); return rangeQuery; } ``` 这个方法可以生成一个Mongo查询,用于判断...

    Lucene查询语法

    RangeQuery rq1 = new RangeQuery(lowerTerm1, upperTerm1, true); ``` `true`表示包含两端值。 ###### 1.5 相似度查询 模糊查询允许用户根据相似度进行查询,可以通过调整相似度阈值来增加查询的准确度。 ```java ...

    lucene学习入门程序

    在Lucene中,你可以使用RangeQuery或NumericRangeQuery实现。 6. **文件组织** - "sample.dw.paper.lucene1.0"可能是项目或示例代码的目录,包含了Lucene的实现代码和可能的测试数据。在这个目录下,你可能会找到...

Global site tag (gtag.js) - Google Analytics