1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #include <helpcompiler/HelpSearch.hxx>
11 #include <osl/file.hxx>
12 #include <osl/thread.hxx>
14 #include "LuceneHelper.hxx"
17 HelpSearch::HelpSearch(OUString
const &indexDir
)
19 OUString ustrSystemPath
;
20 osl::File::getSystemPathFromFileURL(indexDir
, ustrSystemPath
);
21 d_indexDir
= OUStringToOString(ustrSystemPath
, osl_getThreadTextEncoding());
24 void HelpSearch::query(OUString
const &queryStr
, bool captionOnly
,
25 std::vector
<OUString
> &rDocuments
, std::vector
<float> &rScores
) {
27 lucene::index::IndexReader
*reader
= lucene::index::IndexReader::open(d_indexDir
.getStr());
28 lucene::search::IndexSearcher
searcher(reader
);
30 const TCHAR
* field
= captionOnly
? L
"caption" : L
"content";
32 bool isWildcard
= queryStr
[queryStr
.getLength() - 1] == L
'*';
33 std::vector
<TCHAR
> aQueryStr(OUStringToTCHARVec(queryStr
));
34 lucene::search::Query
*pQuery
;
36 pQuery
= _CLNEW
lucene::search::WildcardQuery(_CLNEW
lucene::index::Term(field
, aQueryStr
.data()));
38 pQuery
= _CLNEW
lucene::search::TermQuery(_CLNEW
lucene::index::Term(field
, aQueryStr
.data()));
40 lucene::search::Hits
*hits
= searcher
.search(pQuery
);
41 for (size_t i
= 0; i
< hits
->length(); ++i
) {
42 lucene::document::Document
&doc
= hits
->doc(i
); // Document* belongs to Hits.
43 wchar_t const *path
= doc
.get(L
"path");
44 rDocuments
.push_back(TCHARArrayToOUString(path
!= nullptr ? path
: L
""));
45 rScores
.push_back(hits
->score(i
));
55 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */