Exemplo n.º 1
0
bool TranslationMemoryImpl::Search(const std::wstring& lang,
                                   const std::wstring& source,
                                   Results& results,
                                   int maxHits)
{
    try
    {
        if (maxHits <= 0)
            maxHits = DEFAULT_MAXHITS;

        results.clear();

        Lucene::String fieldName(L"source");
        auto boolQ = newLucene<BooleanQuery>();
        auto phraseQ = newLucene<PhraseQuery>();

        auto stream = m_analyzer->tokenStream(fieldName, newLucene<StringReader>(source));
        while (stream->incrementToken())
        {
            auto word = stream->getAttribute<TermAttribute>()->term();
            auto term = newLucene<Term>(fieldName, word);
            boolQ->add(newLucene<TermQuery>(term), BooleanClause::SHOULD);
            phraseQ->add(term);
        }

        auto searcher = newLucene<IndexSearcher>(Reader());

        PerformSearch(searcher, lang, phraseQ, results, maxHits);
        maxHits -= results.size();
        if (maxHits > 0)
            PerformSearch(searcher, lang, boolQ, results, maxHits);

        return !results.empty();
    }
    catch (LuceneException&)
    {
        return false;
    }
}