Lucene8.2 索引查询

索引查询

1 语法

name:lucene”表示查询Field的name为“lucene”的文档信息

2 查询
  • TermQuery

    • 根据关键词进行查询
    • 需要制定查询的域以及要查询的关键词
  • RangeQuery

    • 范围查询
  • QueryPaser

    • 可以对要查询的内容先分词,然后基于分词的结果进行查询
  • 代码

public class SearchIndex {

    private IndexReader indexReader;
    private IndexSearcher indexSearcher;

    @Before
    public void init() throws Exception {
        indexReader = DirectoryReader.open(FSDirectory.open(new File("F:\\学习文档\\框架10 lucene\\index").toPath()));
        indexSearcher = new IndexSearcher(indexReader);
    }

    @After
    public void after() throws Exception {
        if(indexReader != null){
            indexReader.close();
        }
    }

    @Test
    //查询索引 Query
    public void searchIndex() throws Exception {
        Query query = new TermQuery(new Term("name", "香港"));
        printResult(query);
    }

    // 范围查询
    @Test
    public void testRangeQuery() throws Exception {
        Query query = LongPoint.newRangeQuery("size", 0, 100);
        printResult(query);
    }

    // 分词查询
    @Test
    public void testQueryParser() throws Exception {
        //创建一个QueryParser对象,两个参数
        QueryParser queryParser = new QueryParser("name", new IKAnalyzer());
        //参数1:默认搜索域, 参数2:分析器对象
        //使用QueryPaser对象创建一个Query对象
        Query query = queryParser.parse("lucene是一个Java开发的全文检索工具包");
        //执行查询
        printResult(query);
    }

    private void printResult(Query query) throws Exception{
        TopDocs topDocs = indexSearcher.search(query, 10);
        System.out.println("总记录数:"+topDocs.totalHits);
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        for (ScoreDoc sc: scoreDocs) {
            // 取文档id
            int docId = sc.doc;
            System.out.println(docId);
            // 根据id取文档对象
            Document document = indexSearcher.doc(docId);
            System.out.println(document.get("name"));
            System.out.println(document.get("path"));
            System.out.println(document.get("size"));
            System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=寂寞的分割线");
        }
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值