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"
16 HelpSearch::HelpSearch(OUString
const &indexDir
)
18 OUString ustrSystemPath
;
19 osl::File::getSystemPathFromFileURL(indexDir
, ustrSystemPath
);
20 d_indexDir
= OUStringToOString(ustrSystemPath
, osl_getThreadTextEncoding());
23 bool HelpSearch::query(OUString
const &queryStr
, bool captionOnly
,
24 std::vector
<OUString
> &rDocuments
, std::vector
<float> &rScores
) {
26 lucene::index::IndexReader
*reader
= lucene::index::IndexReader::open(d_indexDir
.getStr());
27 lucene::search::IndexSearcher
searcher(reader
);
29 TCHAR captionField
[] = L
"caption";
30 TCHAR contentField
[] = L
"content";
31 TCHAR
*field
= captionOnly
? captionField
: contentField
;
33 bool isWildcard
= queryStr
[queryStr
.getLength() - 1] == L
'*';
34 std::vector
<TCHAR
> aQueryStr(OUStringToTCHARVec(queryStr
));
35 lucene::search::Query
*pQuery
;
37 pQuery
= _CLNEW
lucene::search::WildcardQuery(_CLNEW
lucene::index::Term(field
, &aQueryStr
[0]));
39 pQuery
= _CLNEW
lucene::search::TermQuery(_CLNEW
lucene::index::Term(field
, &aQueryStr
[0]));
41 lucene::search::Hits
*hits
= searcher
.search(pQuery
);
42 for (unsigned i
= 0; i
< hits
->length(); ++i
) {
43 lucene::document::Document
&doc
= hits
->doc(i
); // Document* belongs to Hits.
44 wchar_t const *path
= doc
.get(L
"path");
45 rDocuments
.push_back(TCHARArrayToOUString(path
!= 0 ? path
: L
""));
46 rScores
.push_back(hits
->score(i
));
58 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */