Lucene笔记11-Lucene的搜索-基于QueryParser的搜索

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36059561/article/details/83299946

一、QueryParser查询

QueryParser查询功能是非常强大的,几乎可以涵盖前面所有的查询,下面是方法体,它将query作为参数传递进来。

// 表达式查询
public void searchByQueryParser(Query query, int number) {
    IndexSearcher indexSearcher = getIndexSearcher();
    try {
        TopDocs topDocs = indexSearcher.search(query, number);
        System.out.println("一共查询到:" + topDocs.totalHits);
        for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
            Document document = indexSearcher.doc(scoreDoc.doc);
            System.out.println(document.get("id") + " " + document.get("name") + " " + document.get("email"));
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (indexSearcher != null) {
            try {
                indexSearcher.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

二、测试案例

将query和number传入searchByQueryParser()方法就可以查询了。

// 默认搜索域为content
QueryParser queryParser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
// 将默认操作符为and,默认是or
queryParser.setDefaultOperator(QueryParser.Operator.AND);
// 搜索content中包含basketball或者football的
Query query = queryParser.parse("basketball football");
// 改变默认搜索域查询
Query query = queryParser.parse("name:zhangsan");
// 改变默认搜索域且使用通配符查询
Query query = queryParser.parse("name:z*");
// 查询name中以i结尾的,默认是不允许查询*开头的,因为会影响效率,不过我们可以手动开启权限
queryParser.setAllowLeadingWildcard(true);
Query query = queryParser.parse("name:*i");
// 查询content(默认搜索域)有football的,并且name不是lisi的,-和+后面必须有空格
Query query = queryParser.parse("- name:lisi + football");
// 查询id是1到3的,包括端点值,这里的TO必须是大写的,改成to会报错
Query query = queryParser.parse("id:[1 TO 3]");
// 查询id是1到3的,不包括端点值,这里的TO必须是大写的,改成to会报错
Query query = queryParser.parse("id:{1 TO 3}");
// 完全匹配I like football的
Query query = queryParser.parse("\"I like football\"");
// 匹配I * football的,并且单词间距为1的
Query query = queryParser.parse("\"I like football\"~1");
// 加一个~构成模糊搜索
Query query = queryParser.parse("name:lixi~");

猜你喜欢

转载自blog.csdn.net/qq_36059561/article/details/83299946