Add wrapper for libzim search and suggestion.

This commit is contained in:
Matthieu Gautier 2023-06-20 16:47:13 +02:00
parent 08d59c4221
commit f9131e901c
9 changed files with 295 additions and 11 deletions

View File

@ -0,0 +1,35 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.Query;
public class TestQuery
{
private Query inner;
public Query inner() { return inner; }
public TestQuery(String query) {
inner = new Query(query);
}
public TestQuery setQuery(String query) { inner.setQuery(query); return this; }
public TestQuery setGeorange(float latitude, float longitute, float distance) { inner.setGeorange(latitude, latitude, distance); return this; }
}

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.Search;
import org.kiwix.libzim.SearchIterator;
public class TestSearch
{
private Search inner;
public TestSearch(Search _inner) { inner = _inner; }
public TestSearchIterator getResults(int start, int maxResults) { return new TestSearchIterator(inner.getResults(start, maxResults)); }
public long getEstimatedMatches() { return inner.getEstimatedMatches(); }
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SearchIterator;
import java.util.Iterator;
public class TestSearchIterator implements Iterator<TestEntry>
{
private SearchIterator inner;
public TestSearchIterator(SearchIterator _inner) { inner = _inner; }
public String getPath() { return inner.getPath(); }
public String getTitle() { return inner.getTitle(); }
public int getScore() { return inner.getScore(); }
public String getSnippet() { return inner.getSnippet(); }
public int getWordCount() { return inner.getWordCount(); }
public int getFileIndex() { return inner.getFileIndex(); }
public int getSize() { return inner.getSize(); }
public String getZimId() { return inner.getZimId(); }
public boolean hasNext() { return inner.hasNext(); }
public TestEntry next() { return new TestEntry(inner.next()); }
}

View File

@ -0,0 +1,47 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.Archive;
import org.kiwix.libzim.Searcher;
import org.kiwix.libzim.Search;
import java.util.stream.Stream;
public class TestSearcher
{
private Searcher inner;
public TestSearcher(TestArchive archive) throws Exception
{
inner = new Searcher(archive.inner());
}
public TestSearcher(TestArchive[] archives) throws Exception
{
inner = new Searcher(
Stream.of(archives).map(a -> a.inner()).toArray(Archive[]::new)
);
}
public TestSearcher addArchive(TestArchive archive) { inner.addArchive(archive.inner()); return this; }
public TestSearch search(TestQuery query) { return new TestSearch(inner.search(query.inner())); }
public void setVerbose(boolean verbose) { inner.setVerbose(verbose); }
public void dispose() { inner.dispose(); }
}

View File

@ -0,0 +1,32 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionItem;
public class TestSuggestionItem
{
private SuggestionItem inner;
public TestSuggestionItem(SuggestionItem _inner) { inner = _inner; }
public String getTitle() { return inner.getTitle(); }
public String getPath() { return inner.getPath(); }
public String getSnippet() { return inner.getSnippet(); }
public boolean hasSnippet() { return inner.hasSnippet(); }
}

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionIterator;
import java.util.Iterator;
public class TestSuggestionIterator implements Iterator<TestSuggestionItem>
{
private SuggestionIterator inner;
public TestSuggestionIterator(SuggestionIterator _inner) { inner = _inner; }
public boolean hasNext() { return inner.hasNext(); }
public TestSuggestionItem next() { return new TestSuggestionItem(inner.next()); }
}

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionSearch;
public class TestSuggestionSearch
{
private SuggestionSearch inner;
public TestSuggestionSearch(SuggestionSearch _inner) { inner = _inner; }
public TestSuggestionIterator getResults(int start, int maxResults) { return new TestSuggestionIterator(inner.getResults(start, maxResults)); }
public long getEstimatedMatches() { return inner.getEstimatedMatches(); }
}

View File

@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionSearcher;
import java.io.FileDescriptor;
public class TestSuggestionSearcher
{
private SuggestionSearcher inner;
public TestSuggestionSearcher(TestArchive archive) throws Exception
{
inner = new SuggestionSearcher(archive.inner());
}
public TestSuggestionSearch suggest(String query) { return new TestSuggestionSearch(inner.suggest(query)); }
public void setVerbose(boolean verbose) { inner.setVerbose(verbose); }
public void dispose() { inner.dispose(); }
}

View File

@ -177,30 +177,30 @@ public class test {
bookmarkArray = lib.getBookmarks(true);
assertEquals(0, bookmarkArray.length);
}
/*
@Test
public void testSearcher() throws Exception, ZimFileFormatException, JNIKiwixException {
Archive archive = new Archive("small.zim");
TestArchive archive = new TestArchive("small.zim");
Searcher searcher = new Searcher(archive);
Query query = new Query("test");
Search search = searcher.search(query);
TestSearcher searcher = new TestSearcher(archive);
TestQuery query = new TestQuery("test");
TestSearch search = searcher.search(query);
int estimatedMatches = (int) search.getEstimatedMatches();
assertEquals(1, estimatedMatches);
SearchIterator iterator = search.getResults(0, estimatedMatches);
TestSearchIterator iterator = search.getResults(0, estimatedMatches);
assertEquals("Test ZIM file", iterator.getTitle());
searcher.dispose();
SuggestionSearcher suggestionSearcher = new SuggestionSearcher(archive);
SuggestionSearch suggestionSearch = suggestionSearcher.suggest("test");
TestSuggestionSearcher suggestionSearcher = new TestSuggestionSearcher(archive);
TestSuggestionSearch suggestionSearch = suggestionSearcher.suggest("test");
int matches = (int) suggestionSearch.getEstimatedMatches();
assertEquals(1, matches);
SuggestionIterator results = suggestionSearch.getResults(1, matches);
SuggestionItem suggestionItem = results.next();
TestSuggestionIterator results = suggestionSearch.getResults(1, matches);
TestSuggestionItem suggestionItem = results.next();
assertEquals("Test ZIM file", suggestionItem.getTitle());
suggestionSearcher.dispose();
}
*/
static
public void main(String[] args) {
Library lib = new Library();