`

lucene中IndexSearch,Query,Hits的总结

阅读更多

IndexSearch 查询器

搜索入口,继承自Search

1.public IndexSearcher(Directory directory)

 使用方法

String IndexPath="D:/IndexPath";

Directory directory=FSDirectory.getDirectory(IndexPath);

IndexSearcher searcher=new IndexSearcher(directory);

支持RAM存储的索引,提高检索速度,建议使用,因为此方法将索引存放的路径与搜索分离

2.public IndexSearcher(String path)

直接操作索引目录.不支持RAM存储的索引

IndexSearcher searcher=new IndexSearcher("D:/IndexPath");

3.public IndexSearcher(IndexReader r)

IndexSearcher searcher=IndexSearcher(reader);

4.private IndexSearcher(IndexReader r, boolean closeReader)

3的基础上对了判断在关闭IndexSearcher时是否要关闭所带的IndexReader对象的boolean类型参数

 

多索引目录就是要在多个索引目录的中进行比较搜索,类似概念在SQL中就是select * from TableA union select * from TableB

IndexSearcher[] searchers = new IndexSearcher[2];

searchers[0] = new IndexSearcher(IndexPath0);

searchers[1] = new IndexSearcher(IndexPath1);

 

IndexSearcher类的主要方法Search 通过重载实现多种检索方式.通过其参数控制检索。

 参数解释

Weigth weigth               权重  指定索引中文档重要性参数,改变默认其值

HitCollector results       保存搜索的所有结果.

Filter filter                      指定对结果进行过滤的方式

Query query                  每个Search必须的对象参数.指定检索的方式

Sort sort                        指定检索排序的方法.可自定义排序方式进行结果的排序和输出

Query

有很多的子类 指定了不同的查询方式,query是用户输入的内容,analyzer是用来将用户输入的内容也作分析处理

TermQuery

Term t=new Term(contents,lucene); 构造TermQuery把查询条件视为一个key, 要求和查询内容完全匹配,比如Field.Keyword类型就可以使用TermQuery

 

RangeQuery    区间检索

RangeQuery  表示一个范围的搜索条件,在年龄,日期,工资等数字类的索引库中常用R,angeQuery query = new RangeQuery(begin, end, included);类似sqlbetwee...and.....最后一个boolean值表示是否包含边界条件本身, 用字符表示为”[begin TO end] 或者”{begin TO end}

 

PrefixQuery    字符串前缀检索,"sys*"

 

BooleanQuery 逻辑组合检索

组合的Query,你可以把各种Query添加进去并标明他们的逻辑关系,添加条件用public void add(Query query, boolean required, boolean prohibited)方法, 后两个boolean变量是              标示AND OR NOT三种关系 字符表示为” AND OR NOT + - ,一个BooleanQuery中可以添加多个Query, 如果超过setMaxClauseCount(int)的值(默认1024)的话,会抛出                  TooManyClauses错误.

 

PhraseQuery 短语检索

PhraseQuery所以提供了一个setSlop()参数,在查询中,lucene会尝试调整单词的距离和位置,这个参数表示可以接受调整次数限制,如果实际的内容可以在这么多步内调整为完全匹配,那么就被视为匹配.在默认情况下slop的值是0, 所以默认是不支持非严格匹配的, 通过设置slop参数(比如”red pig”匹配”red fat pig”就需要1slop来把pig后移动1),我们可以让lucene来模糊查询. 值得注意的是,PhraseQuery不保证前后单词的次序,在上面的例子中,pig red”需要2slop,也就是如果slop如果大于等于2,那么”pig red”也会被认为是匹配的.

 

WildcardQuery 通配符检索

使用?*来表示一个或多个字母比如sys*可以匹配 system ,systop,systaltic,

FuzzyQuery 模糊搜索

一般不处理中文,处理于英文的各种时态变化和复数形式,匹配结果的相关度是不一样的.

 

QueryParser使用

QueryParser将用户输入转为Query或者Query, Query的字符表示(Query.toString)转化为实际的Query对象,

Hit搜索结果的处理:Hits对象

Hits对象是搜索结果的集合 主要有下面几个方法

1.length() ,   记录有多少条结果返回

2.doc(n)       返回第n个记录

3.id(in)         返回第n个记录的Document ID

4.score(n)       n个记录的相关度(积分)

 

 

 

 

分享到:
评论

相关推荐

    Lucene 使用正则表达式

    Hits hits = searcher.search(query); for (int i = 0; i < hits.length(); i++) { System.out.println(hits.doc(i)); } ``` 使用`IndexSearcher`执行查询,并将结果存储在`Hits`对象中。通过循环遍历`Hits`...

    struts2 + spring + lucene_search 实例

    import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; /** * 张超 * ago52030@163.com * @author Administrator * */ public ...

    Lucene时间区间搜索

    var hits = searcher.Search(query, maxResults); ``` 在这个过程中,Analyzer用于处理文本分析,确保时间戳字段的处理符合预期。然后,使用IndexSearcher的Search方法执行查询,返回匹配的文档集合。 为了提高...

    Lucene使用代码实例之搜索文档

    File indexDir = new File("D:\\luceneIndex"); FSDirectory directory = FSDirectory.getDirectory(indexDir,false); IndexSearcher searcher = new IndexSearcher(directory); // 检查索引是否存在 if(!...

    Lucene中文分词组件 JE-Analysis 1.4.0

    Hits hits = isearcher.search(query); System.out.println("命中:" + hits.length()); for (int i = 0; i < hits.length(); i++) { Document hitDoc = hits.doc(i); System.out.println("内容:" + ...

    lucene-6.5.1

    ScoreDoc[] hits = searcher.search(query, 10).scoreDocs; for (ScoreDoc hit : hits) { Document d = searcher.doc(hit.doc); System.out.println(d.get("content")); } reader.close(); } } ``` ### ...

    lucene实例lucene实例

    TopDocs hits = searcher.search(query, 10); ``` 3. 结果处理(Hit Processing):遍历搜索结果,获取匹配的文档,并可进一步获取字段信息。 ```java for (ScoreDoc sd : hits.scoreDocs) { Document doc = ...

    基于lucene的搜索引擎总结

    Hits hits = searcher.search(query); assertEquals("JUnit test", 1, hits.length()); ``` 在多线程环境下,Lucene的IndexWriter和IndexReader是线程安全的,但不支持同时对同一索引进行读写操作。为了提高并发性...

    lucene中文检索

    TopDocs hits = searcher.search(query, 10); // 处理搜索结果... ``` 4. **优化和更新**:IKAnalyzer 支持动态更新词典,当遇到新的词汇或需要调整分词策略时,可以方便地进行优化。 5. **性能调优**:根据...

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    var hits = searcher.Search(query, 10); foreach (var hit in hits.ScoreDocs) { var doc = searcher.Doc(hit.Doc); Console.WriteLine($"Title: {doc.Get("Title")}, Content: {doc.Get("Content")}"); } }...

    lucene2.9.1完整DEMO及开发文档

    TopDocs search(Query query, Filter filter, int n); //执行查询。n指的是最多返回的Document的数量。 Document doc(int 文件内部编号); //根据文档的内部编号获取到该Document void close(); //关闭查询器 2) ...

    lucene查询工具类和IndexSearcher分页查询示例

    在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...

    Lucene.Net实现全文搜索

    TopDocs hits = searcher.Search(q, 10); // 返回前10个结果 foreach (ScoreDoc scoreDoc in hits.ScoreDocs) { Document doc = searcher.Doc(scoreDoc.Doc); Console.WriteLine(doc.Get("title")); } } ``` ...

    lucene 参考手册

    Hits hits = searcher.search(query); System.out.println("doc1 hits=" + hits.length()); searcher.close(); ``` - `IndexSearcher`:用于执行查询。 - `Query`:定义查询条件。 - `Hits`:返回查询结果。 ...

    lucene 2.1.0 好用实例

    总结来说,Lucene 2.1.0实例是一个宝贵的教育资源,它让开发者能够了解如何在实际项目中应用Lucene进行文本搜索。通过学习这个实例,初学者可以快速掌握全文搜索引擎的核心概念,并为进一步深入学习和使用现代Lucene...

    Apache Lucene全文检索和IKAnalyzer分词工具类

    import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.wltea.analyzer.IKSegmentation; import org.wltea.analyzer.Lexeme; ...

    使用lucene.net盘古分词实现站内搜索demo

    var hits = searcher.Search(query, 10); foreach (var hit in hits.ScoreDocs) { var doc = searcher.Doc(hit.Doc); Console.WriteLine($"书名:{doc.Get("title")}, 内容:{doc.Get("content")}"); } } ```...

    用Lucene.net对数据库建立索引及搜索

    5. 使用`IndexSearcher`的`Search`方法,将`Query`对象和搜索条件(如限制返回的条目数量)传入,得到`Hits`对象。 6. 遍历`Hits`,获取匹配的`Document`并展示结果。 总的来说,Lucene.NET为.NET开发者提供了一种...

    全文检索Lucene 全文检索Lucene

    - 分布式搜索:通过Solr或Elasticsearch在集群环境中扩展Lucene的能力。 - 高级查询构造:布尔查询、短语查询、范围查询、模糊查询等。 - 集成到Web应用:如Spring Boot中使用Lucene。 以上内容只是Lucene全文...

    lucene 3.0 入门实例

    TopDocs hits = searcher.search(query, numHits); ``` 4. **结果处理(Handling Results)**: 得到搜索结果后,遍历 ScoreDoc 数组以获取匹配的 Document。 ```java for (ScoreDoc sd : hits.scoreDocs) { ...

Global site tag (gtag.js) - Google Analytics