`

lucene的分组查询

阅读更多

通过lucene搜索去除相同结果。

在网上找了很久到没有答案,到apache看了文档,http://lucene.apache.org/java/2_4_1/queryparsersyntax.html

搜索语法之中是没有类似group by的。只好换个思路,想到了过滤器。

结果发现了org.apache.lucene.search.DuplicateFilter这个类。对此类的解释如下: "Full" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates. 这就是说这个过滤器可以保证搜索的唯一。这样就可以实现类似sql的group by(和group by还是有一定区别的,我想要的要求就是去除相同结果,但次方法经过修改也可实现group by 其他功能)。
多的不说了贴个例子自己研究下吧。

public static void main(String [] args) throws Exception{
   RAMDirectory directory=new RAMDirectory();
   IndexWriter writer=new IndexWriter(directory,new StandardAnalyzer(),true);

//数组中有3个重复值133700
   String[] link ={"",
     "shtml#Ayi:263791429",
     "133700",
     "133700",
     "133700",
     "#Ayi:468534543",
     "#Ayi:-992539968",
     "#Ayi:442193484"};
   String[] parentLink={"110905.shtml",
     "110905.shtml",
     "110905.shtml",
     "110905.shtml",
     "905.shtml",
     "5.shtml",
     "110905.shtml",
     "1"};
   for (int i = 0; i < link.length; i++){
            Document doc = new Document();
            Field fields=new Field("link",link[i], Field.Store.YES, Field.Index.TOKENIZED);
            doc.add(fields);
            fields=null;
            fields=new Field("plink","a"+i, Field.Store.YES, Field.Index.TOKENIZED);
            doc.add(fields);
            writer.addDocument(doc);
        }
   writer.optimize();
   writer.close();
     IndexSearcher indexSearcher=new IndexSearcher(directory);
     QueryParser queryParser=new QueryParser("link",new StandardAnalyzer());
     String xsfd="link:(133700)";

//实例化DuplicateFilter 参数为想要过滤的字段名
     Filter filter = new DuplicateFilter("link");
     Query query=queryParser.parse(xsfd);
     Hits hits=indexSearcher.search(query,filter);
     System.out.println(hits.length());
     for(int j=0;j<hits.length();j++){
        Document doc=(Document)hits.doc(j);
        System.out.println(doc.get("link"));
     }

}

注意:DuplicateFilter在lucene的核心包里并没有在lucene-queries-2.4.1.jar包中,找不到这个包就下个lucene源码在contrib\queries里。哎,还真的不太好发现。

分享到:
评论

相关推荐

    lucene分组查询优化facet

    一、Lucene分组查询原理 Lucene的分组查询(Faceting)是通过对索引中的文档进行多级分类来实现的。它首先会计算每个分面值的文档频率,然后对匹配查询条件的文档进行分组计数。这个过程涉及到倒排索引的遍历和统计...

    Lucene全文搜索 分组,精确查找,模糊查找

    一、Lucene分组查询 在数据检索中,分组查询常常用于对结果进行分类展示,帮助用户更清晰地理解搜索结果的分布。Lucene通过`FieldCache`和`Grouping` API来实现这一功能。首先,我们需要在索引时为需要分组的字段...

    Lucene group by ,分组实现

    "Lucene group by" 指的就是在 Lucene 中实现基于特定字段的分组操作,类似于 SQL 中的 GROUP BY 子句。这使得用户能够按类别聚合文档,例如,根据作者、日期或其他分类标准来查看搜索结果。 在 Lucene 中,分组...

    lucene 分组统计

    ### Lucene 分组统计 #### 一、Lucene 分组统计概述 在 Lucene 的应用场景中,分组统计是一项非常重要的功能。它可以帮助用户快速获取文档集合中的统计数据,例如按类别进行分组并统计每组的数量等。在 Lucene 中...

    一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询

    在本教程中,我们将深入探讨Lucene中的分组查询,这是一种强大的功能,允许我们对搜索结果进行分类或分组,从而提供更有结构化的展示。在"一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询"中,我们将...

    Lucene.net分组

    4. **分组结果处理**:执行分组查询后,Lucene.NET会返回一组`GroupDocs`对象,每个对象代表一个分组,并包含该组内所有匹配的文档。开发人员可以遍历这些结果,对每个分组进行进一步的操作,如计算每个组的文档数量...

    lucene.netGroup

    FieldCache用于存储每个文档的特定字段值,而Grouping API则提供了构建和执行分组查询的能力。 在具体实现上,开发者可能首先创建一个自定义的GroupingStrategy,该策略定义了如何基于指定字段进行分组以及如何处理...

    Lucene5学习之Group分组统计

    2. **Grouping API**:Lucene提供了`GroupingSearch`类,它是实现分组查询的主要接口。使用者需要配置Grouping策略,指定分组字段,并设置是否需要对每个组进行排序等。 3. **GroupCollector和...

    lucene去重、分组统计

    用到的工具 jsoup+spring+struct+DButil+mysql+lucene 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo,让大家有个学习的demo 小试牛刀、临时写的,莫吐槽 需要用到mysql...

    lucene-grouping-3.5.0.jar分组统计+分类统计插件

    lucene-grouping-3.5.0.jar分组统计+分类统计插件 分组统计+分类统计

    Lucene资料大全(包括Lucene_in_Action书等)

    Lucene支持布尔查询、短语查询、模糊查询等多种查询类型。 4. **结果排序**:Lucene通过评分机制(如TF-IDF)对搜索结果进行排序,得分最高的结果优先展示。 5. **过滤与聚合**:Filter和Collector组件可以用于...

    Lucene的简单介绍

    5. 默认实现了一套强大的查询引擎:Lucene的查询引擎默认实现了布尔操作、模糊查询(FuzzySearch)、分组查询等多种功能,用户无需编写代码即可获得强大的查询能力。 Lucene在搜索过程中,首先需要建立索引。索引...

    lucene collector的使用

    而Lucene Collector则是其中一个重要组件,它负责在查询执行过程中收集满足条件的文档,并对这些文档进行进一步处理。本篇文章将深入探讨Lucene Collector的使用以及在分组统计中的应用。 首先,我们要理解Lucene的...

    lucene5.X与lucene3.60的版本差异

    10. Lucene-5666:对非倒排访问(如排序、分类、分组)进行了改变,使用API而非`FieldCache`。推荐使用`UninvertingReader`,它支持多值数字字段,能检测到单值的多值字段,并且在兼容性方面有所提升。 11. Lucene-...

    Lucene in Action英文版

    - **复杂查询**:Lucene支持多种类型的查询,包括布尔查询、短语查询等,以满足复杂的搜索需求。 - **近似搜索**:支持模糊查询和拼写纠正等功能,提高用户体验。 - **排序与分组**:可以对搜索结果进行排序和分组,...

    Lucene3.0.1 官方api

    4. **查询构造**:Lucene使用`QueryParser`类解析用户的查询字符串,生成相应的查询对象。此外,还可以手动构造复杂的查询,如布尔查询、短语查询、范围查询等,通过`BooleanQuery`, `TermQuery`, `PhraseQuery`等类...

    lucene搜索引擎【代码以及jar包】

    Lucene作为一个全文检索引擎... (5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。

    Java全文检索引擎Lucene的应用.pdf

    5. **预置的查询引擎**:Lucene默认提供了一套强大的查询引擎,包括布尔操作、模糊查询、分组查询等功能,大大减轻了开发者的负担。 #### 四、Lucene的运行机制 Lucene的核心功能主要包括两个方面:建立索引库和...

    lucene 所有jar包 包含IKAnalyzer分词器

    最后,`lucene-spatial-3.6.1.jar`则提供了空间索引和查询的功能,对于地理信息检索特别有用。 总的来说,这个压缩包提供了一套完整的Lucene环境,集成了IKAnalyzer分词器,可以用来构建具备中文处理能力的全文搜索...

    lucene,solr的使用

    5. **结果排序与过滤**:根据用户的需求对检索结果进行排序、分组等操作。 6. **返回结果**:将最终的检索结果以指定格式返回给客户端。 #### 三、Lucene与Solr的区别 虽然两者都基于Lucene内核,但在实际应用中...

Global site tag (gtag.js) - Google Analytics