Retrieve result from sqlite Foxit SDK FullTextSearch

49 Views Asked by At

I'm trying FullTextSearch functions from Foxit Pdf Sdk in Xamarin.Android. According to their document, result is kept in sqlite. I have a problem with retrieving result from sqlite and there is no document about retrieving in Foxit Sdk.

Here is my code.

int errCode = Library.Initialize(sn, key);
            if (errCode != Constants.EErrSuccess)
                return string.Empty;

            var search = new FullTextSearch();
            string dbPath = database;
            search.SetDataBasePath(dbPath);
            // Get document source information.
            DocumentsSource source = new DocumentsSource(directory);

            // Create a Pause callback object implemented by users to pause the updating process.
            PauseUtil pause = new PauseUtil(30);

            // Start to update the index of PDF files which receive from the source.
            Progressive progressive = search.StartUpdateIndex(source, pause, false);
            int state = Progressive.EToBeContinued;
            while (state == Progressive.EToBeContinued)
            {
                state = progressive.Resume();
            }

            // Create a callback object which will be invoked when a matched one is found.
            MySearchCallback searchCallback = new MySearchCallback();

            // Search the specified keyword from the indexed data source.
            bool isFinished = search.SearchOf(searchIndex, FullTextSearch.ERankHitCountASC, searchCallback);
1

There are 1 best solutions below

0
On

First I created a property in SearchCallBack funtion.

public List<DtoSearchResult> SearchResults { get; set; }

When override RetrieveSearchResult is processing, I added result into list

public override int RetrieveSearchResult(string filePath, int pageIndex, string matchResult, int matchStartTextIndex, int matchEndTextIndex)
        {
            try
            {
                DtoSearchResult result = new DtoSearchResult();
                result.FilePath = filePath;
                result.MatchResult = matchResult;
                result.PageIndex = pageIndex;
                SearchResults.Add(result);
                return 0;
            }
            catch (System.Exception ex)
            {

                throw ex;
            }
            
        }

And then I called SearchResults property from activity.

searchCallback.SearchResults = new List<DataTransferObjects.DtoSearchResult>();
bool isFinished = search.SearchOf(searchIndex, FullTextSearch.ERankHitCountASC, 
searchCallback);
var result = searchCallback.SearchResults;