lucene_7.1_demo

lucene 7.1 demo

1、基于maven;废话不多说,如下

<dependencies>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-core</artifactId>
        <version>7.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analyzers-smartcn</artifactId>
        <version>7.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-queryparser</artifactId>
        <version>7.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-highlighter</artifactId>
        <version>7.1.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

</dependencies>

2、IndexWriter(可以是实体,也可以是读取的文件)

2.1实体

@Test
public void add() throws IOException {

    Article article = new Article();
    article.setId(1);
    article.setTitle("Lucene全文检索");
    article.setContent("Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。");

    final Path path = Paths.get("./article/");

    Directory directory = FSDirectory.open(path);
    Analyzer analyzer = new StandardAnalyzer();

    IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
    indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);

    IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);

    Document document = new Document();
    document.add(new TextField("id", article.getId().toString(), Field.Store.YES));
    document.add(new TextField("title", article.getTitle(), Field.Store.YES));
    document.add(new TextField("content", article.getContent(), Field.Store.YES));

    indexWriter.addDocument(document);
    indexWriter.close();

}

2.2 文件

@Test
public void addFile() throws IOException {

    final Path path = Paths.get("./article/");

    Directory directory = FSDirectory.open(path);
    Analyzer analyzer = new StandardAnalyzer();

    IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
    indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);

    IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
    BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("e:/2017_10_17.stderrout.log")));
    String content = "";
    while ((content = bufferedReader.readLine())!=null){
        System.out.println(content);
        Document document = new Document();
        document.add(new TextField("logs", content, Field.Store.YES));
        indexWriter.addDocument(document);
    }

    indexWriter.close();

}

3、Search(查询)

@Test
    public void SearchFiles() throws IOException, ParseException {
//        String queryString = "全文检索";
        String queryString  = "error";

        //多条件
//        Query q = MultiFieldQueryParser.parse(new String[]{},new String[]{},new StandardAnalyzer());

        final Path path = Paths.get("./article/");
        Directory directory = FSDirectory.open(path);
        Analyzer analyzer = new StandardAnalyzer();

        IndexReader indexReader = DirectoryReader.open(directory);
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);

        //单条件
        QueryParser queryParser = new QueryParser("logs",analyzer);
        Query query = queryParser.parse(queryString);

        TopDocs topDocs = indexSearcher.search(query,10);

        long conut = topDocs.totalHits;
        System.out.println("检索总条数:"+conut);
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        for (ScoreDoc scoreDoc : scoreDocs) {
            Document document = indexSearcher.doc(scoreDoc.doc);
            System.out.print("相关度:"+scoreDoc.score+"-----time:"+document.get("time"));
            System.out.println(document.get("logs"));
        }
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值