lucene_7.1_demo

来源:互联网 发布:全球商务数据公司 编辑:程序博客网 时间:2024/06/03 14:47

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实体

@Testpublic 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 文件

@Testpublic 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"));        }    }


原创粉丝点击