Я создаю мобильное приложение с использованиемact-native и использую native Java для поиска с использованием библиотеки lucene 8 - PullRequest
0 голосов
/ 21 марта 2020

Я создаю мобильное приложение с использованиемact-native и использую собственный Java для выполнения поиска с использованием библиотеки Lucene 8.

Использование собственных модулей и обратных вызовов в этой документации: https://reactnative.dev/docs/0.5/native-modules-android

При попытке открыть папку указателей появляется ошибка: Индекс: Файловая система только для чтения

Примечание: 1) Я делаю index offline throw java, затем вручную я переместил Папку указателей в реактивный проект Как показано на этом изображении

2) Я читаю только из файла в Интернете перейти в онлайн, как это:

public class Searcher {

    private Directory indexDirectoryPath;
    private IndexReader indexReader;
    protected IndexSearcher indexSearcher;


    public Searcher() throws IOException {
        indexDirectoryPath = FSDirectory.open(Paths.get("../Quraan.index"));
        indexReader = DirectoryReader.open(indexDirectoryPath);
        indexSearcher = new IndexSearcher(indexReader);
    }

    public ScoreDoc[] searchbyContent(String querytext) throws IOException, ParseException {
        ScoreDoc[] hits;
        try {
            StandardAnalyzer analyzer = new StandardAnalyzer();
            Query q = new QueryParser("content", analyzer).parse(querytext);
            int hitsPerPage = 10;
            TopDocs docs = indexSearcher.search(q, hitsPerPage);
            hits = docs.scoreDocs;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return hits;
    }
}

здесь я отправляю результат:

   @ReactMethod
    public void searchCallback(String querytext,Callback errCallback, Callback sucCallback){
        try {
            Searcher s = new Searcher();
            ScoreDoc[] hits = s.searchbyContent(querytext);
            int docId = hits[1].doc;
            Document d = s.indexSearcher.doc(docId);
            sucCallback.invoke(d.get("content"));
        }catch (IllegalViewOperationException | IOException | ParseException e){
            errCallback.invoke(e.getMessage());
        }

    }

и вот я получаю его в js:

async getMessage() {
    Searcher.searchCallback("Lord",
      (err) => { this.setState({ searchResult: err }) },
      (message) => { this.setState({ searchResult: message }) },
    )
  }

Так может ли кто-нибудь помочь мне решить эту проблему?

...