项目实训——lucene高级检索之范围查询

        默认的根据关键词检索段落是在所有书籍中进行检索,高级检索向用户提供范围查询,用户可以手动选择需要查询的书籍。

        建立索引时插入了StringField字段book,用以作检索时的判断标志。

        StringField和TextField的区别:StringField默认不分词建立索引,TextField会对字段内容进行分词之后再索引。

        lucene提供一个Query的抽象类来定义查询。由于查询是和具体的使用环境相关的,所以具有新特点的Query类型可能会不断的添加到系统中,这部分的设计应该较多的考虑扩展的需要。

    public static Query createQuery(boolean isCh, String keyword, String book) throws ParseException {
        BooleanQuery query=new BooleanQuery();
        if (isCh)
            query.add(chParser.parse(keyword), BooleanClause.Occur.MUST);
        else
            query.add(engParser.parse(keyword), BooleanClause.Occur.MUST);
        if (book.length() > 0){
            String[] list = book.split(",");
            BooleanQuery query1 = new BooleanQuery();
            for(String s : list){
                int i = Integer.parseInt(s);
                query1.add(new TermQuery(new Term("book", books[i-1])), BooleanClause.Occur.SHOULD);
                System.out.println(books[i-1]);
            }
            query.add(query1, BooleanClause.Occur.MUST);
        }
        return query;
    }

Occur.MUST:必须满足此条件,相当于and

Occur.SHOULD:应该满足,但是不满足也可以,相当于or

Occur.MUST_NOT:必须不满足。相当于not

        CreateQuery方法中传入要检索的关键词和书籍列表,书籍以String形式存储,书籍id之间以“,”间隔分开。

由于BooleanQuery中所有query只能同时是Occur.MUST/Occur.SHOULD/Occur.MUST_NOT,书籍之间是or的关键,而书籍和关键词之间是and的关系,因此需要创建两个BooleanQuey,最后将两个Query合到一起返回。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值