精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-30
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);类似sql中betwee...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”就需要1个slop来把pig后移动1位),我们可以让lucene来模糊查询. 值得注意的是,PhraseQuery不保证前后单词的次序,在上面的例子中,”pig red”需要2个slop,也就是如果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个记录的相关度(积分)
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 3670 次