diff --git a/m4/acx_clucene.m4 b/m4/acx_clucene.m4 index a313279..0ad98e9 100644 --- a/m4/acx_clucene.m4 +++ b/m4/acx_clucene.m4 @@ -38,6 +38,9 @@ for flag in $with_clucene; do if test -e "$flag/lib/libclucene.so"; then CLUCENE_LIBS="-L$flag/lib -lclucene" CLUCENE_CXXFLAGS="-I$flag/include -I$config_path" + clucene_ver=$(grep _CL_VERSION $config_path/CLucene/clucene-config.h | grep -Eo [[01]].[[0-9]]+.[[0-9]]+) + + echo Lucene ver: $clucene_ver clucene_set_failed=$flag fi fi @@ -62,6 +65,21 @@ else AC_MSG_RESULT($clucene_set_failed) fi +if test -z "$clucene_ver"; then + # optimistic guess :D + clucene_ver="1.0.0" +fi +clucene_apiver=$(echo -e "0.9.18\n$clucene_ver" | sort | head -n1) + +if test "$clucene_ver" == "$clucene_apiver"; then + CLUCENE_BONGO_API=1 + echo Old Lucene API - Lucene Ver: $clucene_ver +else + CLUCENE_BONGO_API=2 + echo Current Lucene API - $clucene_ver +fi + +AC_SUBST(CLUCENE_BONGO_API) AC_SUBST(CLUCENE_LIBS) AC_SUBST(CLUCENE_CXXFLAGS) diff --git a/src/agents/store/Bongo.rules b/src/agents/store/Bongo.rules index 3446d62..9f42d0d 100644 --- a/src/agents/store/Bongo.rules +++ b/src/agents/store/Bongo.rules @@ -3,6 +3,7 @@ sbin_PROGRAMS += bongostore bongostore_CPPFLAGS := $(AM_CPPFLAGS) \ -I$(top_srcdir)/src/agents/store \ + -DCLUCENE_BONGO_API=$(CLUCENE_BONGO_API) \ $(SQLITE_CFLAGS) \ $(CLUCENE_CXXFLAGS) diff --git a/src/agents/store/lucene-index.cpp b/src/agents/store/lucene-index.cpp index f669b72..d41ca78 100644 --- a/src/agents/store/lucene-index.cpp +++ b/src/agents/store/lucene-index.cpp @@ -6,6 +6,8 @@ extern "C" { #include "lucene-index.h" +#if CLUCENE_BONGO_API == 1 +// pre-0.9.18 API // Keyword analyzer class KeywordAnalyzer : public Analyzer @@ -56,44 +58,27 @@ KeywordTokenizer::next(Token *token) } token->set(ioBuffer, 0, dataLen); return true; -#if 0 - while (true) { - TCHAR c; - offset++; - if (bufferIndex >= dataLen) { - dataLen = input->read(ioBuffer, LUCENE_IO_BUFFER_SIZE); - ioBuffer[dataLen] = 0; - bufferIndex = 0; - } - - if (dataLen <= 0 ) { - if (length > 0) { - break; - } else { - return false; - } - } else { - c = ioBuffer[bufferIndex++]; - } - - if (length == 0) { - start = offset - 1; - } - - buffer[length++] = c; - if (length == LUCENE_MAX_WORD_LEN) { - break; - }; - } - - buffer[length] = 0; - - token->set (buffer, start, start + length); - return true; -#endif } +#endif // CLUCENE_BONGO_API == 1 +QueryParser * +LuceneIndex::GetQueryParser() +{ + + if (queryParser) { + return queryParser; + } + + queryParser = new QueryParser(_T("everything"), analyzer); +#if CLUCENE_BONGO_API == 1 + queryParser->setOperator(lucene::queryParser::QueryParserBase::AND_OPERATOR); +#else + queryParser->setDefaultOperator(lucene::queryParser::QueryParserBase::AND_OPERATOR); +#endif + + return queryParser; +} LuceneIndex::LuceneIndex() : reader(NULL), writer(NULL), @@ -244,19 +229,3 @@ LuceneIndex::GetIndexSearcher() return searcher; } - -QueryParser * -LuceneIndex::GetQueryParser() -{ - - if (queryParser) { - return queryParser; - } - - queryParser = new QueryParser(_T("everything"), analyzer); - queryParser->setOperator(lucene::queryParser::QueryParserBase::AND_OPERATOR); - - return queryParser; -} - -