com.mycompany.mavenproject1.Main.java Source code

Java tutorial

Introduction

Here is the source code for com.mycompany.mavenproject1.Main.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.mavenproject1;

import java.io.IOException;
import java.nio.file.Paths;
import javax.xml.stream.XMLStreamException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;

/**
 *
 * @author slete
 */
public class Main {
    public static void main(String[] args) throws IOException, ParseException {
        StandardAnalyzer analyzer = new StandardAnalyzer();
        //        Directory index = new RAMDirectory();
        Directory index = new SimpleFSDirectory(Paths.get(
                "C:\\Users\\slete\\Documents\\NetBeansProjects\\mavenproject1\\src\\main\\java\\com\\mycompany\\mavenproject1\\data"));
        IndexWriterConfig config = new IndexWriterConfig(analyzer);
        //config.setOpenMode(OpenMode.CREATE);
        IndexWriter w = new IndexWriter(index, config);
        try (ItemProvider provider = new ItemProvider(
                "C:\\Users\\slete\\Documents\\NetBeansProjects\\mavenproject1\\src\\main\\java\\com\\mycompany\\mavenproject1\\items.xml")) {

            while (provider.hasNext()) {
                Item item = provider.next();
                addItem(w, item);

            }
        } catch (XMLStreamException | IOException ex) {
            ex.getMessage();
        }
        //        w.commit();
        w.close();

        //        String queryStr = "id:1* NOT id:19*";
        String a = "id:1* NOT id:19*";
        String b = "name:Dekielek AND description:(ty AND obiektywu)";
        String c = "category:Dek*";
        String ds = "id:1232~2";
        String e = "price:[0.0 TO 100.0]";

        Query q = new QueryParser("name", analyzer).parse(ds);

        int hitsPerPage = 10;
        IndexReader reader = DirectoryReader.open(index);
        IndexSearcher searcher = new IndexSearcher(reader);
        TopDocs docs = searcher.search(q, hitsPerPage);
        ScoreDoc[] hits = docs.scoreDocs;

        System.out.println("Found " + hits.length + " hits.");
        for (int i = 0; i < hits.length; ++i) {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            System.out
                    .println(d.get("id") + "\t" + d.get("price") + "\t" + d.get("name") + "\t" + d.get("category"));//+"\t" + d.get("description"));
        }
    }

    private static void addItem(IndexWriter w, Item i) throws IOException {
        Document doc = new Document();
        doc.add(new StringField("id", String.valueOf(i.getId()), Field.Store.YES));
        doc.add(new StringField("price", String.valueOf(i.getPrice()), Field.Store.YES));
        doc.add(new TextField("name", i.getName(), Field.Store.YES));
        doc.add(new TextField("category", i.getCategory() != null ? i.getCategory() : "ni ma", Field.Store.YES));
        doc.add(new TextField("description", i.getDescription(), Field.Store.YES));
        w.addDocument(doc);
    }

}