Lucene IndexWriter.commit () не завершен в Ubuntu - PullRequest
0 голосов
/ 09 мая 2018

Вот код инициализации

public class Main {

public void index(String input_path, String index_dir, String separator, String extension, String field, DataHandler handler) {

    Index index = new Index(handler);
    index.initWriter(index_dir, new StandardAnalyzer());
    index.run(input_path, field, extension, separator);
}

public List<?> search(String input_path, String index_dir, String separator, String extension, String field, DataHandler handler) {

    Search search = new Search(handler);
    search.initSearcher(index_dir, new StandardAnalyzer());

    return search.runUsingFiles(input_path, field, extension, separator);
}

@SuppressWarnings("unchecked")
public static void main(String[] args) {

    String lang = "en-US";
    String dType = "data";

    String train = "res/input/" +lang+ "/" +dType +"/train/";
    String test = "res/input/"+ lang+ "/" +dType+ "/test/";

    String separator = "\\|";
    String extension = "csv";

    String index_dir = "res/index/" +lang+ "." +dType+ ".index";
    String output_file = "res/result/" +lang+ "." +dType+ ".output.json";

    String searched_field = "utterance";

    Main main = new Main();
    DataHandler handler = new DataHandler();

    main.index(train, index_dir, separator, extension, searched_field, handler);
    //List<JSONObject> result = (List<JSONObject>) main.search(test, index_dir, separator, extension, searched_field, handler);
    //handler.writeOutputJson(result, output_file); 
}

}


Это мой код

public class Index {

private IndexWriter writer;
private DataHandler handler;

public Index(DataHandler handler) {
    this.handler = handler;
}

public Index() {
    this(new DataHandler());
}

public void initWriter(String index_path, Directory store, Analyzer analyzer) {
    IndexWriterConfig config = new IndexWriterConfig(analyzer);

    try {
        this.writer = new IndexWriter(store, config);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void initWriter(String index_path, Analyzer analyzer) {

    try {
        initWriter(index_path, FSDirectory.open(Paths.get(index_path)), analyzer);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void initWriter(String index_path) {
    List<String> stopWords = Arrays.asList();
    CharArraySet stopSet = new CharArraySet(stopWords, false);
    initWriter(index_path, new StandardAnalyzer(stopSet));
}

@SuppressWarnings("unchecked")
public void indexDocs(List<?> datas, String field) throws IOException {
    FieldType fieldType = new FieldType();
    FieldType fieldType2 = new FieldType();

    fieldType.setStored(true);
    fieldType.setTokenized(true);
    fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS);

    fieldType2.setStored(true);
    fieldType2.setTokenized(false);
    fieldType2.setIndexOptions(IndexOptions.DOCS);

    for(int i = 0 ; i < datas.size() ; i++) {
        Map<String,String> temp = (Map<String,String>) datas.get(i);
        Document doc = new Document();

        for(String key : temp.keySet()) {
            if(key.equals(field))
                continue;
            doc.add(new Field(key, temp.get(key), fieldType2));
        }
        doc.add(new Field(field, temp.get(field), fieldType));

        this.writer.addDocument(doc);                   
    }           

}

public void run(String path, String field, String extension, String separator) {
    List<File> files = this.handler.getInputFiles(path, extension);
    List<?> data = this.handler.readDocs(files, separator);
    try {
        System.out.println("start index");
        indexDocs(data, field);
        this.writer.commit();
        this.writer.close();
        System.out.println("done");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void run(String path) {
    run(path, "search_field", "csv", "\t");
}

Я сделал простой модуль поиска, используя Java и Lucene.

Этот модуль состоял из двух фаз: индекса и поиска.

В фазе индекса Он считывает CSV-файлы и преобразует в Документ каждую строку и добавляет в объект IndexWriter, используя метод IndexWriter.addDocument().

Наконец, вызов метода IndexWriter.commit().

Хорошо работает на моем локальном ПК (windows)

, но в Ubuntu PC метод не завершен IndexWriter.commit().

Конечно, IndexWriter.flush() метод не работает.

В чем проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...