lucene排序

 lucene默认的排序方式,在lucene中也被称为“评分机制”,可以同过给sort对象传递一个null来实现,也可以通过调用sort默认的构造函数来实现
Searcher searcher=new IndexSearcher("c:\\index");
QueryParser parser=new QueryParser("contents",analyzer);
Query query=parser.parse("abc");
hits=searcher.search(query,Sort.RELEVANCE);
Sort sort=new Sort();//生成排序类
hits=searcher.search(query,sort);

Sort.RELEVANCE  : 该方法指对检索的结果按照 查询的相关度进行排序,默认采用,是new sort()的简写,其功能一样
Sort.INDEXORDER : 该方法指对检索的结果按照建立索引时的顺序进行排列
############注意:在Lucene中"相关度"和"文档id"是两个特殊的类型检索,检索时首先会以相关度为标准降序排列,当文档的相关度相同时,会以文档的ID为标准升序排列。文档ID值文档被索引时的顺序

--------------------------------------按字段(Field)来对document排序
注意:要使用这一方法必须满足该字段是“可排序”的,排序方式是根据字段升序排序
Sort sort=new Sort("contents");
hits=searcher.search(query,sort);

/**
   * 按照某个field升或降序排序
   */
  public Sort(String field, boolean reverse) {
    setSort(field, reverse);
  }
默认情况下按字段的升序排列,boolean reverse 是false,设置为true 时则按字段的降序排列

-------------------------------------对多个字段(Field)排序
Sort sort=new Sort(new SortField[]{new SortField("title"),new SortField("contents")});//生成排序对象
hits=searcher.search(query,sort);

----------------------------------使用MultiFieldQueryParser来进行多域搜索
如果查询只关心查询的词条terms ,而不关心这些terms到底是在那个字段中是用多域搜索
Query query=NultiFieldQueryParser.parse("luceneword",new String[]{"title","contents"},analyzer);
Hits hits=searcher.search(query);
上述代码中,使用MultiFieldQueryParser类在两个域"title"和"contents"内进行检索,并且在两个域内的检索关系是or运算符连接
在使用MultiFieldQueryParser进行检索时,除了可以使用or运算符进行连接外,还可以用以下几个关键字控制每个字段的情况
1:REQUIRED_FIELD : 该字段中必须包含有输入的检索关键字
2:PROHIBITED_FIELD: 该字段中必须不包含有输入的检索关键字
3:NORMAL_FIELD :该字段采用默认的情况
EG: Query query=MultiFieldQueryParser.parse("luceneword",new String[]{"title","contents"},new int[]{MultiFieldQueryParser.REQUIRED_FIELD,MultiFieldQueryParser.PROHIBITED_FIELD},analyzer);
Hits hits=searcher.search(query);

------------------------------------使用MultiSearcher来同时搜索多个索引
如果系统中有多个索引文件,并且需要使用一个单独的query跨索引进行检索,那么使用MultiSearcher类
1:分别用两个索引目录构造两个索引读取器,用来从两个索引目录中读取信息
2:将两个索引文件读取器放入一个索引器数组searcher[]中
3:用索引器数组构造一个MultiSearcher类的对象,调用MultiSearcher对象的search(query)方法;
eg:Searcher[] searchers=new Searcher[2];
searcher[0]=new IndexSearcher(indexStoreA);
searcher[1]=new IndexSearcher(indexStoreB);
Searcher mSearcher=new MultiSearcher(searchers);//创建一个多索引检索器
Hits hist=msearcher.search(query);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值