`

lucene整理3 -- 排序、过滤、分词器

阅读更多
1.    排序
1.1. Sort类
public Sort()

public Sort(String field)

public Sort(String field,Boolean reverse)  //默认为false,降序排序

public Sort(String[] fields)

public Sort(SortField field)

public Sort(SortField[] fields)

Sort sort=new Sort(“bookname”);按照“bookname“这个Field值进行降序排序

Sort sort=new Sort(“bookname”,true) //升序排序

Sort sort=new Sort(new String[]{“bookNumber”,”bookname”,”publishdate”});按照三个Field进行排序,但无法指定升序排序,所以用SortField

1.2. SortField类
public SortField(String field)

public SortField(String field,Boolean reverse)

public SortField(String field,int type) //type表示当前Field值的类型

public SortField(String field,int type,boolean reverse)  //默认为false,升序

Field值的类型:SortField.STRING、SortField.INT、SortField.FLOAT

SortField sf1=new SortField(“bookNumber”,SortField.INT,false);

SortField sf2=new SortField(“bookname”,SortField.STRING,false);

1.3. 指定排序的法则
1.3.1.按照文档的得分降序排序
Hits hits=searcher.search(query,Sort.RELEVANCE);

1.3.2.按文档的内部ID升序排序
Hits hits=searcher.search(query, Sort.INDEXORDER);

1.3.3.按照一个Field来排序
Sort sort=new Sort();

SortField sf=new SortField(“bookNumber”,SortField.INT,false);

sort.setSort(sf);

Hits hits=searcher.search(query,sort);

1.3.4.按照多个Field来排序
Sort sort=new Sort();

SortField sf1=new SortField(“bookNumber”,SortField.INT,false);//升序

SortField sf2=new SortField(“publishdate”,SortField.STRING,true);//降序

sort.setSort(new SortField[]{sf1,sf2});

Hits hits=searcher.search(query,sort);

1.3.5.改变SortField中的Locale信息
String str1=”我”; String str2=”你”;

Collator co1=Collator.getInstance(Locale.CHINA);

Collator co2=Collator.getInstance(Locale.JAPAN);

System.out.println(Locale.CHINA+”:”+co1.compare(str1,str2));

System.out.println(Locale.JAPAN+”:”+co2.compare(str1,str2));

输出结果为:

zh_CN:1

ja_JP:-1

所以

public SortField(String field,Locale locale)

public SortField(String field,Locale locale,boolean reverse)

2.    过滤器
使用public Hits search(Query query,Filter filter)

(1)简单过滤

Hits hits=searcher.search(query,new AdvancedSecurityFilter());//过滤掉securitylevel为0的结果

(2)范围过滤—RangeFilter

只显示中间的

RangeFilter filter=new RangeFilter(“publishdate”,”1970-01-01”,”1998-12-31”,true,true”);

Hits hits=searcher.search(query,filter);

 

无上边界

public static RangeFilter More(String fieldname,String lowerTerm)

 

无下边界

public static RangeFilter Less(String fieldname,String upperTerm)

(3)在结果中查询QueryFilter

RangeQuery q=new RangeQuery(new Term(“publicshdate”,”1970-01-01”),

new Term(“publishdate”,”1999-01-01”),true);

QueryFilter filter=new QueryFilter(q);

Hits hits=searcher.search(query,filter);

3.    分析器Analysis
3.1. 自带分析器和过滤器
Ø         标准过滤器:StandardAnalyzer

Ø         大小写转换器:LowerCaseFilter

Ø         忽略词过滤器:StopFilter

public StopFilter(TokenStream input,String [] stopWords)

public StopFilter(TokenStream in,String [] stopWords,boolean ignoreCase)

public StopFilter(TokenStream input,Set stopWords,boolean ignoreCase)

public StopFilter(TokenStream in, Set stopWords)

其中,参数TokenStream代表当前正在进行处理的流;String类型的数组代表一个用数组表示的忽略词集合;Set类型的参数与String一样,是用来表示忽略词集合的;boolean表示当与忽略词集合中的词进行匹配时,是否需要忽略大小写。

Ø         长度过滤器:LengthFilter

Ø         PerFieldAnalyzerWrapper

Ø         WhitespaceAnalyzer

String str="str1 str2 str3";

       StringReader reader=new StringReader(str);

       Analyzer anlyzer=new WhitespaceAnalyzer();

       

       TokenStream ts=anlyzer.tokenStream("", reader);

       Token t=null;

       while( (t=ts.next())!=null ){

           System.out.println(t.termText());

       }

3.2. 第三方过分析器
Ø         单字分词

Ø         二分法:CJKAnalyzer、中科院ICTCLAS分词、JE分词

Ø         词典分词

3.2.1.JE分词用法
3.2.1.1.    示例
import jeasy.analysis.MMAnalyzer;

IndexWriter writer = new IndexWriter(INDEX_STORE_PATH, new MMAnalyzer()

, true);

String str=" Lucene是一个全文检索引擎的架构,"+

           "提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快" +

           "速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用" +

           "中实现针对应用的全文索引、检索功能,本总结使用lucene--2.3.2。";

       MMAnalyzer analyzer=new MMAnalyzer();

       try{

           System.out.println(analyzer.segment(str, "|"));

       }

       catch(Exception e)

       {

           e.printStackTrace();

       }

输出结果:lucene|一个|全文|检索|引擎|架构|提供|完整|查询|。。。。

3.2.1.2.    设定正向最大匹配的字数
MMAnalyzer analyzer=new MMAnalyzer(4);

3.2.1.3.    添加新词
MMAnalyzer.addWord(String word);

MMAnalyzer.addDictionary(Reader reader); 

MMAnalyzer analyzer=new MMAnalyzer();

MMAnalyzer.addWord("迈克尔雷第");

 



4.    索引的合并
RAMDirectory RAMDir=new RAMDirectory();

IndexWriter writer = new IndexWriter(RAMDir, new StandardAnalyzer(), true);//删除原有索引

IndexWriter writer2=new IndexWriter(FSDirectory.getDirectory(path,true),

new StandardAnalyzer(), true);

writer.addDocument(doc1);

writer2.addDocument(doc2);

writer.close();

writer2.addIndexes(new Directory[]{RAMDir});

writer2.close();
注意:在合并前一定要先关闭要加的索引器。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoping8411/archive/2010/03/24/5413738.aspx
分享到:
评论

相关推荐

    lucene-core-2.3.0 lucene-core2.4.0以及极易分词器 jar包

    在使用这些组件时,开发者需要了解Lucene的基本概念,如文档模型、倒排索引、查询解析和过滤器等。同时,对于Je-Analysis,需要理解其分词规则,如何配置和调用分词器,以及如何将其集成到Lucene的索引和搜索流程中...

    Lucene-core-2.0.0.jar

    在2.0.0版中,Lucene对分词器(Analyzer)进行了改进,支持自定义分词规则,以适应不同语言和领域的搜索需求。分词器将文本分解为独立的搜索单元,是影响搜索准确性和效率的关键因素。 除了核心功能,Lucene还提供...

    lucene-4.2.1-src.tgz

    7. **高级功能**:Lucene还包括多线程支持、近实时搜索、自定义排序、过滤器(`Filter`)和拦截器(`Collector`)等高级特性,允许开发者进行更复杂的检索策略设计。 8. **扩展性**:Lucene本身只是一个库,开发者...

    Lucene 5 主要jar包

    它包括文档的创建、索引、查询以及结果的排序和过滤。这个jar包提供了如Analyzer、IndexWriter、Directory、QueryParser等关键类。 2. **lucene-analyzers-common-5.0.0.jar**:这个包包含了Lucene的通用分析器,...

    lucene-core-3.0.0.rar_lucene_lucene-core3

    8. **过滤器(Filter)**:允许我们对搜索结果进行进一步的筛选,比如按日期、评分等条件进行排序。 在Lucene 3.0.0中,还有一些值得注意的改进和特性: 1. **性能优化**:这一版本的Lucene对内存使用和搜索速度...

    lucene4.10.4 jar,手动整理,去除其他文件

    9. **扩展性**:Lucene的API设计允许开发者根据需求进行扩展,比如定制分词器、查询解析器或过滤器。 10. **分布式搜索**:通过Solr或Elasticsearch等项目,Lucene可以扩展到分布式环境,支持大规模数据的搜索需求...

    lucene所有的jar包

    “Ik”的jar包则可能是指“Smart Chinese Analyzer for Lucene”,即ik分词器,这是一个专门针对中文的分词库,适用于Lucene和Solr。Ik分词器能够对中文文本进行有效的分词处理,提高了中文搜索的准确性。`ik-...

    lucene源码---官网最新下载

    - **Analyzer**: 分析器是 Lucene 的关键组件,负责将输入的文本转换为可供搜索的词项(Tokens)。它通常包括词分词、去除停用词、词形还原等预处理步骤。 - **IndexWriter**: 用于创建或更新 Lucene 索引。它可以...

    lucene-core-4.9.3,开源jar包

    它不仅支持基本的文本搜索,还提供了高级特性,如布尔查询、短语查询、模糊查询以及对查询结果的排序和过滤。由于其高度可定制性和灵活性,Lucene已成为许多大型企业和开源项目的首选搜索解决方案。 二、Lucene ...

    lucene-2.9.3-src.zip

    - **过滤器(Filter)**:允许对搜索结果进行进一步筛选,如按日期、地理位置等条件。 - **分面搜索(Faceting)**:提供分类统计,便于用户按类别浏览搜索结果。 - **近实时搜索(NRT)**:IndexWriter支持打开...

    lucene-3.0.2-dev-src

    在`src`目录下的`org.apache.lucene.analysis`包中,包含各种分词器(Tokenizer)和分析器(Analyzer)。分词器将输入文本分解为一个个词汇单元,而分析器则进一步处理这些单元,如去除停用词、词形还原等。例如,`...

    lucene-2.9.2.jar包+源码

    对于中文分词,Lucene-2.9.2提供了对多种分词器的支持,如IK分词器、SmartCN分词器等。这些分词器能够将中文文本拆分成有意义的词汇单元,为后续的索引和搜索提供基础。例如,IK分词器以其良好的分词效果和较高的...

    java全文搜索lucene-3.0.0-src+lib.zip

    Lucene提供了丰富的API,允许开发者添加自定义的查询处理器、过滤器等,实现更多高级功能。 五、总结 Java全文搜索引擎Lucene 3.0.0是一个强大且灵活的工具,不仅适用于大型数据集的搜索,也适用于小型应用的快速...

    lucene-3.6.1-src

    例如,可以创建自定义的分析器、查询解析器和排序模型。 通过对"lucene-3.6.1-src"的深入研究,开发者不仅可以了解搜索引擎的基本工作流程,还能掌握如何在实际项目中运用这些技术,提升搜索体验。虽然现在Lucene...

    lucene-3.0.0-src.zip

    3. 词项分析器(Analyzer):Analyzer负责整合分词器、词干提取器和停用词列表,对输入的文本进行预处理,确保索引的准确性和效率。 二、索引构建与查询 1. 索引创建:Document对象用于存储文档信息,Field对象...

    lucene-core-2.4.0的源码

    Lucene 2.4.0的源码提供了丰富的API接口,开发者可以基于这些接口实现自己的分析器、过滤器、查询解析器等,以适应不同的应用场景。 总之,通过深入学习Lucene 2.4.0的源码,我们可以了解到搜索引擎背后的基本原理...

    lucene-1.4-final

    在这个版本中,用户可以自定义分析器,对输入文本进行分词、去除停用词等预处理操作。倒排索引是Lucene实现高效搜索的关键,它将每个词对应到包含这个词的文档列表。 2. **查询解析**:Lucene支持复杂的查询语法,...

    Lucene In Action-book

    - **Analysis (分析)**:介绍了文本分析的过程,包括分词、过滤器等技术。 - **Advanced search techniques (高级搜索技术)**:探讨了复杂的搜索技巧,如近义词搜索、模糊匹配等。 - **Extending search (扩展...

    lucene je-analysis jar包

    Lucene包含了索引、搜索、分词、排序、高亮、相关性等功能,使得开发者能够快速构建复杂的搜索引擎。 Lucene的核心在于其索引机制。它将文本数据转化为倒排索引,这是一种优化的存储结构,允许快速查找包含特定词汇...

    lucene-5.5.3.zip

    - **分析器(Analyzer)**:包含分词器、过滤器等,对原始文本进行预处理,以适应特定的语言或搜索需求。 - **文档(Document)**:表示要被索引的信息,可以包含多个字段(Field),如标题、内容、作者等。 - **...

Global site tag (gtag.js) - Google Analytics