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 &lang
, OUString
const &indexDir
)
19 OUString ustrSystemPath
;
20 osl::File::getSystemPathFromFileURL(indexDir
, ustrSystemPath
);
21 d_indexDir
= OUStringToOString(ustrSystemPath
, osl_getThreadTextEncoding());
24 bool 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 TCHAR captionField
[] = L
"caption";
31 TCHAR contentField
[] = L
"content";
32 TCHAR
*field
= captionOnly
? captionField
: contentField
;
34 bool isWildcard
= queryStr
[queryStr
.getLength() - 1] == L
'*';
35 std::vector
<TCHAR
> aQueryStr(OUStringToTCHARVec(queryStr
));
36 lucene::search::Query
*pQuery
;
38 pQuery
= _CLNEW
lucene::search::WildcardQuery(_CLNEW
lucene::index::Term(field
, &aQueryStr
[0]));
40 pQuery
= _CLNEW
lucene::search::TermQuery(_CLNEW
lucene::index::Term(field
, &aQueryStr
[0]));
42 lucene::search::Hits
*hits
= searcher
.search(pQuery
);
43 for (unsigned i
= 0; i
< hits
->length(); ++i
) {
44 lucene::document::Document
&doc
= hits
->doc(i
); // Document* belongs to Hits.
45 wchar_t const *path
= doc
.get(L
"path");
46 rDocuments
.push_back(TCHARArrayToOUString(path
!= 0 ? path
: L
""));
47 rScores
.push_back(hits
->score(i
));
59 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */