mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-13 17:43:59 +02:00
Merge pull request #252 from tomahawk-player/lucenepp
Switched from CLucene to Lucene++
This commit is contained in:
@@ -247,8 +247,8 @@ endif()
|
|||||||
macro_optional_find_package(Echonest 2.2.0)
|
macro_optional_find_package(Echonest 2.2.0)
|
||||||
macro_log_feature(ECHONEST_FOUND "Echonest" "Qt library for communicating with The Echo Nest" "http://projects.kde.org/libechonest" TRUE "" "libechonest 2.2.0 is needed for dynamic playlists and the infosystem")
|
macro_log_feature(ECHONEST_FOUND "Echonest" "Qt library for communicating with The Echo Nest" "http://projects.kde.org/libechonest" TRUE "" "libechonest 2.2.0 is needed for dynamic playlists and the infosystem")
|
||||||
|
|
||||||
macro_optional_find_package(CLucene 0.9.23)
|
macro_optional_find_package(Lucene++ 3.0.0)
|
||||||
macro_log_feature(CLucene_FOUND "CLucene" "The open-source, C++ search engine" "http://clucene.sf.net" TRUE "" "CLucene is used for indexing the collection")
|
macro_log_feature(LUCENEPP_FOUND "Lucene++" "The open-source, C++ search engine" "https://github.com/luceneplusplus/LucenePlusPlus/" TRUE "" "Lucene++ is used for indexing the collection")
|
||||||
|
|
||||||
if( NOT TOMAHAWK_QT5 )
|
if( NOT TOMAHAWK_QT5 )
|
||||||
macro_optional_find_package(QJSON 0.8.1)
|
macro_optional_find_package(QJSON 0.8.1)
|
||||||
|
@@ -1,132 +0,0 @@
|
|||||||
#
|
|
||||||
# This module looks for clucene (http://clucene.sf.net) support
|
|
||||||
# It will define the following values
|
|
||||||
#
|
|
||||||
# CLUCENE_INCLUDE_DIRS = CLUCENE_INCLUDE_DIR + CLUCENE_LIBRARY_DIR
|
|
||||||
# CLUCENE_INCLUDE_DIR = where CLucene/StdHeader.h can be found
|
|
||||||
# CLUCENE_LIBRARY_DIR = where CLucene/clucene-config.h can be found
|
|
||||||
# CLUCENE_LIBRARIES = the libraries to link against CLucene
|
|
||||||
# CLUCENE_VERSION = The CLucene version string
|
|
||||||
# CLucene_FOUND = set to 1 if clucene is found
|
|
||||||
#
|
|
||||||
|
|
||||||
INCLUDE(CheckSymbolExists)
|
|
||||||
INCLUDE(FindLibraryWithDebug)
|
|
||||||
|
|
||||||
# try to locate a patched unstable version (for comp's sake *sigh*) first
|
|
||||||
FIND_PACKAGE(CLuceneUnstable QUIET)
|
|
||||||
IF(CLUCENEUNSTABLE_FOUND)
|
|
||||||
SET(CLucene_FOUND TRUE)
|
|
||||||
SET(CLUCENE_INCLUDE_DIR ${CLUCENE_UNSTABLE_INCLUDE_DIRS})
|
|
||||||
SET(CLUCENE_INCLUDE_DIRS ${CLUCENE_INCLUDE_DIR})
|
|
||||||
SET(CLUCENE_LIBRARIES ${CLUCENE_UNSTABLE_LIBS})
|
|
||||||
|
|
||||||
#MESSAGE(FATAL_ERROR NARF)
|
|
||||||
ELSE(CLUCENEUNSTABLE_FOUND)
|
|
||||||
IF(CLucene_FIND_VERSION)
|
|
||||||
SET(CLUCENE_MIN_VERSION ${CLucene_FIND_VERSION})
|
|
||||||
ELSEIF()
|
|
||||||
SET(CLUCENE_MIN_VERSION "0.9.23")
|
|
||||||
ENDIF(CLucene_FIND_VERSION)
|
|
||||||
|
|
||||||
IF(EXISTS ${PROJECT_CMAKE}/CLuceneConfig.cmake)
|
|
||||||
INCLUDE(${PROJECT_CMAKE}/CLuceneConfig.cmake)
|
|
||||||
ENDIF(EXISTS ${PROJECT_CMAKE}/CLuceneConfig.cmake)
|
|
||||||
|
|
||||||
SET(TRIAL_LIBRARY_PATHS
|
|
||||||
$ENV{CLUCENE_HOME}/lib${LIB_SUFFIX}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}
|
|
||||||
/usr/local/lib${LIB_SUFFIX}
|
|
||||||
/usr/lib${LIB_SUFFIX}
|
|
||||||
/sw/lib${LIB_SUFFIX}
|
|
||||||
/usr/pkg/lib${LIB_SUFFIX}
|
|
||||||
/usr/lib64
|
|
||||||
/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}
|
|
||||||
)
|
|
||||||
SET(TRIAL_INCLUDE_PATHS
|
|
||||||
$ENV{CLUCENE_HOME}/include
|
|
||||||
${CMAKE_INSTALL_PREFIX}/include
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
/sw/include
|
|
||||||
/usr/pkg/include
|
|
||||||
)
|
|
||||||
FIND_LIBRARY_WITH_DEBUG(CLUCENE_CORE_LIBRARY
|
|
||||||
WIN32_DEBUG_POSTFIX d
|
|
||||||
NAMES clucene-core
|
|
||||||
PATHS ${TRIAL_LIBRARY_PATHS})
|
|
||||||
IF (CLUCENE_CORE_LIBRARY)
|
|
||||||
MESSAGE(STATUS "Found CLucene core library: ${CLUCENE_CORE_LIBRARY}")
|
|
||||||
ENDIF (CLUCENE_CORE_LIBRARY)
|
|
||||||
FIND_LIBRARY_WITH_DEBUG(CLUCENE_SHARED_LIBRARY
|
|
||||||
WIN32_DEBUG_POSTFIX d
|
|
||||||
NAMES clucene-shared
|
|
||||||
PATHS ${TRIAL_LIBRARY_PATHS})
|
|
||||||
IF (CLUCENE_SHARED_LIBRARY)
|
|
||||||
MESSAGE(STATUS "Found CLucene shared library: ${CLUCENE_SHARED_LIBRARY}")
|
|
||||||
ENDIF (CLUCENE_SHARED_LIBRARY)
|
|
||||||
|
|
||||||
IF(CLUCENE_CORE_LIBRARY AND CLUCENE_SHARED_LIBRARY)
|
|
||||||
SET(CLUCENE_LIBRARIES ${CLUCENE_CORE_LIBRARY} ${CLUCENE_SHARED_LIBRARY})
|
|
||||||
ENDIF(CLUCENE_CORE_LIBRARY AND CLUCENE_SHARED_LIBRARY)
|
|
||||||
|
|
||||||
FIND_PATH(CLUCENE_INCLUDE_DIR
|
|
||||||
NAMES CLucene.h
|
|
||||||
PATHS ${TRIAL_INCLUDE_PATHS})
|
|
||||||
|
|
||||||
IF (CLUCENE_INCLUDE_DIR)
|
|
||||||
MESSAGE(STATUS "Found CLucene include dir: ${CLUCENE_INCLUDE_DIR}")
|
|
||||||
ENDIF (CLUCENE_INCLUDE_DIR)
|
|
||||||
|
|
||||||
IF(WIN32)
|
|
||||||
SET(TRIAL_LIBRARY_PATHS ${CLUCENE_INCLUDE_DIR})
|
|
||||||
ENDIF(WIN32)
|
|
||||||
|
|
||||||
SET(CLUCENE_GOOD_VERSION TRUE)
|
|
||||||
|
|
||||||
FIND_PATH(CLUCENE_LIBRARY_DIR
|
|
||||||
NAMES CLuceneConfig.cmake/CLuceneConfig.cmake CLucene/CLuceneConfig.cmake
|
|
||||||
PATHS ${TRIAL_LIBRARY_PATHS} ${TRIAL_INCLUDE_PATHS} NO_DEFAULT_PATH)
|
|
||||||
IF (CLUCENE_LIBRARY_DIR)
|
|
||||||
MESSAGE(STATUS "Found CLucene library dir: ${CLUCENE_LIBRARY_DIR}")
|
|
||||||
# include CLuceneConfig/CLuceneConfig.cmake
|
|
||||||
IF(EXISTS ${CLUCENE_LIBRARY_DIR}/CLuceneConfig.cmake/CLuceneConfig.cmake)
|
|
||||||
INCLUDE(${CLUCENE_LIBRARY_DIR}/CLuceneConfig.cmake/CLuceneConfig.cmake)
|
|
||||||
ENDIF(EXISTS ${CLUCENE_LIBRARY_DIR}/CLuceneConfig.cmake/CLuceneConfig.cmake)
|
|
||||||
# include CLucene/CLuceneConfig.cmake
|
|
||||||
IF(EXISTS ${CLUCENE_LIBRARY_DIR}/CLucene/CLuceneConfig.cmake)
|
|
||||||
INCLUDE(${CLUCENE_LIBRARY_DIR}/CLucene/CLuceneConfig.cmake)
|
|
||||||
ENDIF(EXISTS ${CLUCENE_LIBRARY_DIR}/CLucene/CLuceneConfig.cmake)
|
|
||||||
IF (CLUCENE_VERSION STRLESS "${CLUCENE_MIN_VERSION}")
|
|
||||||
MESSAGE(ERROR " CLucene version ${CLUCENE_VERSION} is less than the required minimum ${CLUCENE_MIN_VERSION}")
|
|
||||||
SET(CLUCENE_GOOD_VERSION FALSE)
|
|
||||||
ENDIF (CLUCENE_VERSION STRLESS "${CLUCENE_MIN_VERSION}")
|
|
||||||
IF (CLUCENE_VERSION STREQUAL "0.9.17")
|
|
||||||
MESSAGE(ERROR "CLucene version 0.9.17 is not supported.")
|
|
||||||
SET(CLUCENE_GOOD_VERSION FALSE)
|
|
||||||
ENDIF (CLUCENE_VERSION STREQUAL "0.9.17")
|
|
||||||
ENDIF (CLUCENE_LIBRARY_DIR)
|
|
||||||
|
|
||||||
IF(CLUCENE_INCLUDE_DIR AND CLUCENE_LIBRARIES AND CLUCENE_LIBRARY_DIR AND CLUCENE_GOOD_VERSION)
|
|
||||||
SET(CLucene_FOUND TRUE)
|
|
||||||
SET(CLUCENE_INCLUDE_DIRS ${CLUCENE_LIBRARY_DIR} ${CLUCENE_INCLUDE_DIR})
|
|
||||||
ENDIF(CLUCENE_INCLUDE_DIR AND CLUCENE_LIBRARIES AND CLUCENE_LIBRARY_DIR AND CLUCENE_GOOD_VERSION)
|
|
||||||
|
|
||||||
ENDIF(CLUCENEUNSTABLE_FOUND)
|
|
||||||
|
|
||||||
IF(CLucene_FOUND)
|
|
||||||
IF(NOT CLucene_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found CLucene: ${CLUCENE_LIBRARIES} version ${CLUCENE_VERSION}")
|
|
||||||
ENDIF(NOT CLucene_FIND_QUIETLY)
|
|
||||||
ELSE(CLucene_FOUND)
|
|
||||||
IF(CLucene_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find CLucene.")
|
|
||||||
ENDIF(CLucene_FIND_REQUIRED)
|
|
||||||
ENDIF(CLucene_FOUND)
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
|
||||||
CLUCENE_INCLUDE_DIRS
|
|
||||||
CLUCENE_INCLUDE_DIR
|
|
||||||
CLUCENE_LIBRARY_DIR
|
|
||||||
CLUCENE_LIBRARIES
|
|
||||||
)
|
|
@@ -1,37 +0,0 @@
|
|||||||
# - Try to find clucene-unstable
|
|
||||||
# This is a workaround for distros, that want to ship a recent enough clucene but don't want to replace the old version
|
|
||||||
#
|
|
||||||
# CLUCENEUNSTABLE_FOUND - system has clucene-unstable
|
|
||||||
# CLUCENE_UNSTABLE_INCLUDE_DIR - the clucene-unstable include directories
|
|
||||||
# CLUCENE_UNSTABLE_LIBS - link these to use clucene-unstable
|
|
||||||
#
|
|
||||||
# (c) Dominik Schmidt <dev@dominik-schmidt.de>
|
|
||||||
#
|
|
||||||
|
|
||||||
# Include dir
|
|
||||||
find_path(CLUCENE_UNSTABLE_INCLUDE_DIR
|
|
||||||
NAMES CLucene.h
|
|
||||||
PATH_SUFFIXES clucene-unstable
|
|
||||||
PATHS ${KDE4_INCLUDE_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Finally the library itself
|
|
||||||
find_library(CLUCENE_UNSTABLE_SHARED_LIB
|
|
||||||
NAMES clucene-unstable-shared
|
|
||||||
PATHS ${KDE4_LIB_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(CLUCENE_UNSTABLE_CORE_LIB
|
|
||||||
NAMES clucene-unstable-core
|
|
||||||
PATHS ${KDE4_LIB_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
SET( CLUCENE_UNSTABLE_LIBS ${CLUCENE_UNSTABLE_SHARED_LIB} ${CLUCENE_UNSTABLE_CORE_LIB} )
|
|
||||||
SET( CLUCENE_UNSTABLE_INCLUDE_DIRS ${CLUCENE_UNSTABLE_INCLUDE_DIR})
|
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CLuceneUnstable DEFAULT_MSG CLUCENE_UNSTABLE_LIBS CLUCENE_UNSTABLE_INCLUDE_DIRS)
|
|
||||||
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(CLUCENE_UNSTABLE_LIBS CLUCENE_UNSTABLE_INCLUDE_DIRS)
|
|
||||||
|
|
@@ -53,7 +53,7 @@ IF (LUCENEPP_SHARED_LIBRARY)
|
|||||||
ENDIF (LUCENEPP_SHARED_LIBRARY)
|
ENDIF (LUCENEPP_SHARED_LIBRARY)
|
||||||
|
|
||||||
IF(LUCENEPP_CORE_LIBRARY AND LUCENEPP_SHARED_LIBRARY)
|
IF(LUCENEPP_CORE_LIBRARY AND LUCENEPP_SHARED_LIBRARY)
|
||||||
SET(LUCENEPP_LIBRARIES ${LUCENEPP_CORE_LIBRARY} ${LUCENEPP_SHARED_LIBRARY})
|
SET(LUCENEPP_LIBRARIES ${LUCENEPP_CORE_LIBRARY} ${LUCENEPP_SHARED_LIBRARY} boost_system)
|
||||||
ENDIF(LUCENEPP_CORE_LIBRARY AND LUCENEPP_SHARED_LIBRARY)
|
ENDIF(LUCENEPP_CORE_LIBRARY AND LUCENEPP_SHARED_LIBRARY)
|
||||||
|
|
||||||
FIND_PATH(LUCENEPP_INCLUDE_DIR
|
FIND_PATH(LUCENEPP_INCLUDE_DIR
|
||||||
@@ -71,7 +71,7 @@ ENDIF(WIN32)
|
|||||||
SET(LUCENEPP_GOOD_VERSION TRUE)
|
SET(LUCENEPP_GOOD_VERSION TRUE)
|
||||||
|
|
||||||
FIND_PATH(LUCENEPP_LIBRARY_DIR
|
FIND_PATH(LUCENEPP_LIBRARY_DIR
|
||||||
NAMES liblucene++.so
|
NAMES liblucene++.dylib liblucene++.so liblucene++.dll
|
||||||
PATHS ${TRIAL_LIBRARY_PATHS} ${TRIAL_INCLUDE_PATHS} NO_DEFAULT_PATH)
|
PATHS ${TRIAL_LIBRARY_PATHS} ${TRIAL_INCLUDE_PATHS} NO_DEFAULT_PATH)
|
||||||
IF (LUCENEPP_LIBRARY_DIR)
|
IF (LUCENEPP_LIBRARY_DIR)
|
||||||
MESSAGE(STATUS "Found Lucene++ library dir: ${LUCENEPP_LIBRARY_DIR}")
|
MESSAGE(STATUS "Found Lucene++ library dir: ${LUCENEPP_LIBRARY_DIR}")
|
||||||
|
@@ -394,8 +394,8 @@ Section "Tomahawk Player" SEC_TOMAHAWK_PLAYER
|
|||||||
File "${MING_BIN}\libssl-10.dll"
|
File "${MING_BIN}\libssl-10.dll"
|
||||||
File "${MING_BIN}\libcrypto-10.dll"
|
File "${MING_BIN}\libcrypto-10.dll"
|
||||||
|
|
||||||
File "${MING_BIN}\libclucene-core.dll"
|
File "${MING_BIN}\liblucene++.dll"
|
||||||
File "${MING_BIN}\libclucene-shared.dll"
|
File "${MING_BIN}\liblucene++-contrib.dll"
|
||||||
|
|
||||||
File "${MING_BIN}\libqtsparkle.dll"
|
File "${MING_BIN}\libqtsparkle.dll"
|
||||||
File "${MING_BIN}\libattica.dll"
|
File "${MING_BIN}\libattica.dll"
|
||||||
|
@@ -43,7 +43,7 @@ Required dependencies:
|
|||||||
* SQLite 3.6.22 - http://www.sqlite.org/
|
* SQLite 3.6.22 - http://www.sqlite.org/
|
||||||
* TagLib 1.8 - http://developer.kde.org/~wheeler/taglib.html
|
* TagLib 1.8 - http://developer.kde.org/~wheeler/taglib.html
|
||||||
* Boost 1.3 - http://www.boost.org/
|
* Boost 1.3 - http://www.boost.org/
|
||||||
* CLucene 0.9.23 (0.9.21 will fail) - http://clucene.sourceforge.net/download.shtml
|
* Lucene++ 3.0.6 - https://github.com/luceneplusplus/LucenePlusPlus/
|
||||||
* libechonest 2.2.0 - http://projects.kde.org/projects/playground/libs/libechonest/
|
* libechonest 2.2.0 - http://projects.kde.org/projects/playground/libs/libechonest/
|
||||||
* Attica 0.4.0 - ftp://ftp.kde.org/pub/kde/stable/attica/
|
* Attica 0.4.0 - ftp://ftp.kde.org/pub/kde/stable/attica/
|
||||||
* QuaZip 0.4.3 - http://quazip.sourceforge.net/
|
* QuaZip 0.4.3 - http://quazip.sourceforge.net/
|
||||||
|
@@ -406,7 +406,7 @@ include_directories(
|
|||||||
${QT_INCLUDE_DIR}
|
${QT_INCLUDE_DIR}
|
||||||
${QJSON_INCLUDE_DIR}
|
${QJSON_INCLUDE_DIR}
|
||||||
${ECHONEST_INCLUDE_DIR}
|
${ECHONEST_INCLUDE_DIR}
|
||||||
${CLUCENE_INCLUDE_DIRS}
|
${LUCENEPP_INCLUDE_DIRS}
|
||||||
${PHONON_INCLUDES}
|
${PHONON_INCLUDES}
|
||||||
${Boost_INCLUDE_DIR}
|
${Boost_INCLUDE_DIR}
|
||||||
|
|
||||||
@@ -525,12 +525,11 @@ TARGET_LINK_LIBRARIES( tomahawklib
|
|||||||
${LIBPORTFWD_LIBRARIES}
|
${LIBPORTFWD_LIBRARIES}
|
||||||
${QTKEYCHAIN_LIBRARIES}
|
${QTKEYCHAIN_LIBRARIES}
|
||||||
|
|
||||||
|
|
||||||
LINK_PUBLIC
|
LINK_PUBLIC
|
||||||
# External deps
|
# External deps
|
||||||
${QJSON_LIBRARIES}
|
${QJSON_LIBRARIES}
|
||||||
${TAGLIB_LIBRARIES}
|
${TAGLIB_LIBRARIES}
|
||||||
${CLUCENE_LIBRARIES}
|
${LUCENEPP_LIBRARIES}
|
||||||
${ECHONEST_LIBRARIES}
|
${ECHONEST_LIBRARIES}
|
||||||
${QT_QTSQL_LIBRARY}
|
${QT_QTSQL_LIBRARY}
|
||||||
${QT_QTUITOOLS_LIBRARY}
|
${QT_QTUITOOLS_LIBRARY}
|
||||||
|
@@ -19,8 +19,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#ifndef QUERY_H
|
#ifndef TOMAHAWK_QUERY_H
|
||||||
#define QUERY_H
|
#define TOMAHAWK_QUERY_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
@@ -154,4 +154,4 @@ private:
|
|||||||
|
|
||||||
Q_DECLARE_METATYPE( Tomahawk::query_ptr )
|
Q_DECLARE_METATYPE( Tomahawk::query_ptr )
|
||||||
|
|
||||||
#endif // QUERY_H
|
#endif // TOMAHAWK_QUERY_H
|
||||||
|
@@ -429,7 +429,6 @@ TomahawkSettings::doUpgrade( int oldVersion, int newVersion )
|
|||||||
|
|
||||||
setValue( "configuration", configuration );
|
setValue( "configuration", configuration );
|
||||||
endGroup();
|
endGroup();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a Last.Fm account since we now moved the infoplugin into the account
|
// Add a Last.Fm account since we now moved the infoplugin into the account
|
||||||
@@ -674,6 +673,11 @@ TomahawkSettings::doUpgrade( int oldVersion, int newVersion )
|
|||||||
}
|
}
|
||||||
#endif //Q_OS_MAC
|
#endif //Q_OS_MAC
|
||||||
}
|
}
|
||||||
|
else if ( oldVersion == 15 )
|
||||||
|
{
|
||||||
|
// 0.8.0 switches to Lucene++. Force a reindex.
|
||||||
|
QTimer::singleShot( 0, this, SLOT( updateIndex() ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
#include <QNetworkProxy>
|
#include <QNetworkProxy>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
#define TOMAHAWK_SETTINGS_VERSION 15
|
#define TOMAHAWK_SETTINGS_VERSION 16
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience wrapper around QSettings for tomahawk-specific config
|
* Convenience wrapper around QSettings for tomahawk-specific config
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
*
|
*
|
||||||
* Copyright 2010-2013, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
* Copyright 2010-2014, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
||||||
*
|
*
|
||||||
* Tomahawk is free software: you can redistribute it and/or modify
|
* Tomahawk is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -29,45 +29,32 @@
|
|||||||
#include <QTime>
|
#include <QTime>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
#include <CLucene.h>
|
#include <lucene++/FuzzyQuery.h>
|
||||||
#include <CLucene/queryParser/MultiFieldQueryParser.h>
|
|
||||||
|
|
||||||
using namespace lucene::analysis;
|
using namespace Lucene;
|
||||||
using namespace lucene::analysis::standard;
|
|
||||||
using namespace lucene::document;
|
|
||||||
using namespace lucene::store;
|
|
||||||
using namespace lucene::index;
|
|
||||||
using namespace lucene::queryParser;
|
|
||||||
using namespace lucene::search;
|
|
||||||
|
|
||||||
|
|
||||||
FuzzyIndex::FuzzyIndex( QObject* parent, const QString& filename, bool wipe )
|
FuzzyIndex::FuzzyIndex( QObject* parent, const QString& filename, bool wipe )
|
||||||
: QObject( parent )
|
: QObject( parent )
|
||||||
, m_luceneReader( 0 )
|
|
||||||
, m_luceneSearcher( 0 )
|
|
||||||
{
|
{
|
||||||
m_lucenePath = TomahawkUtils::appDataDir().absoluteFilePath( filename );
|
m_lucenePath = TomahawkUtils::appDataDir().absoluteFilePath( filename );
|
||||||
QByteArray path = m_lucenePath.toUtf8();
|
|
||||||
const char* cPath = path.constData();
|
|
||||||
|
|
||||||
bool failed = false;
|
bool failed = false;
|
||||||
tDebug() << "Opening Lucene directory:" << path;
|
tDebug() << "Opening Lucene directory:" << m_lucenePath;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_analyzer = _CLNEW SimpleAnalyzer();
|
m_analyzer = newLucene<SimpleAnalyzer>();
|
||||||
m_luceneDir = FSDirectory::getDirectory( cPath );
|
m_luceneDir = FSDirectory::open( m_lucenePath.toStdWString() );
|
||||||
}
|
}
|
||||||
catch ( CLuceneError& error )
|
catch ( LuceneException& error )
|
||||||
{
|
{
|
||||||
tDebug() << "Caught CLucene error:" << error.what();
|
tDebug() << "Caught Lucene error:" << error.what();
|
||||||
failed = true;
|
failed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( failed )
|
if ( failed )
|
||||||
{
|
{
|
||||||
tDebug() << "Initializing RAM directory instead.";
|
deleteIndex();
|
||||||
|
|
||||||
m_luceneDir = _CLNEW RAMDirectory();
|
|
||||||
wipe = true;
|
wipe = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,10 +65,7 @@ FuzzyIndex::FuzzyIndex( QObject* parent, const QString& filename, bool wipe )
|
|||||||
|
|
||||||
FuzzyIndex::~FuzzyIndex()
|
FuzzyIndex::~FuzzyIndex()
|
||||||
{
|
{
|
||||||
delete m_luceneSearcher;
|
tLog( LOGVERBOSE ) << Q_FUNC_INFO;
|
||||||
delete m_luceneReader;
|
|
||||||
delete m_analyzer;
|
|
||||||
delete m_luceneDir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -113,24 +97,22 @@ FuzzyIndex::beginIndexing()
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Starting indexing:" << m_lucenePath;
|
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Starting indexing:" << m_lucenePath;
|
||||||
if ( m_luceneReader != 0 )
|
if ( m_luceneReader )
|
||||||
{
|
{
|
||||||
tDebug( LOGVERBOSE ) << "Deleting old lucene stuff.";
|
tDebug( LOGVERBOSE ) << "Deleting old lucene stuff.";
|
||||||
|
|
||||||
m_luceneSearcher->close();
|
m_luceneSearcher->close();
|
||||||
m_luceneReader->close();
|
m_luceneReader->close();
|
||||||
delete m_luceneSearcher;
|
m_luceneSearcher.reset();
|
||||||
delete m_luceneReader;
|
m_luceneReader.reset();
|
||||||
m_luceneSearcher = 0;
|
|
||||||
m_luceneReader = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tDebug( LOGVERBOSE ) << "Creating new index writer.";
|
tDebug( LOGVERBOSE ) << "Creating new index writer.";
|
||||||
m_luceneWriter = new IndexWriter( m_luceneDir, m_analyzer, true );
|
m_luceneWriter = newLucene<IndexWriter>( m_luceneDir, m_analyzer, true, IndexWriter::MaxFieldLengthLIMITED );
|
||||||
}
|
}
|
||||||
catch( CLuceneError& error )
|
catch( LuceneException& error )
|
||||||
{
|
{
|
||||||
tDebug() << "Caught CLucene error:" << error.what();
|
tDebug() << "Caught Lucene error:" << error.what();
|
||||||
Q_ASSERT( false );
|
Q_ASSERT( false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,10 +122,9 @@ void
|
|||||||
FuzzyIndex::endIndexing()
|
FuzzyIndex::endIndexing()
|
||||||
{
|
{
|
||||||
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Finishing indexing:" << m_lucenePath;
|
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Finishing indexing:" << m_lucenePath;
|
||||||
// m_luceneWriter->optimize();
|
m_luceneWriter->optimize();
|
||||||
m_luceneWriter->close();
|
m_luceneWriter->close();
|
||||||
delete m_luceneWriter;
|
m_luceneWriter.reset();
|
||||||
m_luceneWriter = 0;
|
|
||||||
|
|
||||||
m_mutex.unlock();
|
m_mutex.unlock();
|
||||||
emit indexReady();
|
emit indexReady();
|
||||||
@@ -155,41 +136,41 @@ FuzzyIndex::appendFields( const Tomahawk::IndexData& data )
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Document doc;
|
DocumentPtr doc = newLucene<Document>();
|
||||||
|
|
||||||
if ( !data.track.isEmpty() )
|
if ( !data.track.isEmpty() )
|
||||||
{
|
{
|
||||||
doc.add( *( _CLNEW Field( _T( "fulltext" ), Tomahawk::DatabaseImpl::sortname( QString( "%1 %2" ).arg( data.artist ).arg( data.track ) ).toStdWString().c_str(),
|
doc->add(newLucene<Field>( L"fulltext", Tomahawk::DatabaseImpl::sortname( QString( "%1 %2" ).arg( data.artist ).arg( data.track ) ).toStdWString(),
|
||||||
Field::STORE_NO | Field::INDEX_UNTOKENIZED ) ) );
|
Field::STORE_NO, Field::INDEX_ANALYZED ) );
|
||||||
|
|
||||||
doc.add( *( _CLNEW Field( _T( "track" ), Tomahawk::DatabaseImpl::sortname( data.track ).toStdWString().c_str(),
|
doc->add(newLucene<Field>( L"track", Tomahawk::DatabaseImpl::sortname( data.track ).toStdWString(),
|
||||||
Field::STORE_NO | Field::INDEX_UNTOKENIZED ) ) );
|
Field::STORE_NO, Field::INDEX_ANALYZED ) );
|
||||||
|
|
||||||
doc.add( *( _CLNEW Field( _T( "artist" ), Tomahawk::DatabaseImpl::sortname( data.artist ).toStdWString().c_str(),
|
doc->add(newLucene<Field>( L"artist", Tomahawk::DatabaseImpl::sortname( data.artist ).toStdWString(),
|
||||||
Field::STORE_NO | Field::INDEX_UNTOKENIZED ) ) );
|
Field::STORE_NO, Field::INDEX_ANALYZED ) );
|
||||||
|
|
||||||
doc.add( *( _CLNEW Field( _T( "artistid" ), QString::number( data.artistId ).toStdWString().c_str(),
|
doc->add(newLucene<Field>( L"artistid", QString::number( data.artistId ).toStdWString(),
|
||||||
Field::STORE_YES | Field::INDEX_NO ) ) );
|
Field::STORE_YES, Field::INDEX_NO ) );
|
||||||
|
|
||||||
doc.add( *( _CLNEW Field( _T( "trackid" ), QString::number( data.id ).toStdWString().c_str(),
|
doc->add(newLucene<Field>( L"trackid", QString::number( data.id ).toStdWString(),
|
||||||
Field::STORE_YES | Field::INDEX_NO ) ) );
|
Field::STORE_YES, Field::INDEX_NO ) );
|
||||||
}
|
}
|
||||||
else if ( !data.album.isEmpty() )
|
else if ( !data.album.isEmpty() )
|
||||||
{
|
{
|
||||||
doc.add( *( _CLNEW Field( _T( "album" ), Tomahawk::DatabaseImpl::sortname( data.album ).toStdWString().c_str(),
|
doc->add(newLucene<Field>( L"album", Tomahawk::DatabaseImpl::sortname( data.album ).toStdWString(),
|
||||||
Field::STORE_NO | Field::INDEX_UNTOKENIZED ) ) );
|
Field::STORE_NO, Field::INDEX_ANALYZED ) );
|
||||||
|
|
||||||
doc.add( *( _CLNEW Field( _T( "albumid" ), QString::number( data.id ).toStdWString().c_str(),
|
doc->add(newLucene<Field>( L"albumid", QString::number( data.id ).toStdWString(),
|
||||||
Field::STORE_YES | Field::INDEX_NO ) ) );
|
Field::STORE_YES, Field::INDEX_NO ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_luceneWriter->addDocument( &doc );
|
m_luceneWriter->addDocument( doc );
|
||||||
}
|
}
|
||||||
catch( CLuceneError& error )
|
catch( LuceneException& error )
|
||||||
{
|
{
|
||||||
tDebug() << "Caught CLucene error:" << error.what();
|
tDebug() << "Caught Lucene error:" << error.what();
|
||||||
|
|
||||||
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
|
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
|
||||||
}
|
}
|
||||||
@@ -199,25 +180,24 @@ FuzzyIndex::appendFields( const Tomahawk::IndexData& data )
|
|||||||
void
|
void
|
||||||
FuzzyIndex::deleteIndex()
|
FuzzyIndex::deleteIndex()
|
||||||
{
|
{
|
||||||
if ( m_luceneReader != 0 )
|
if ( m_luceneReader )
|
||||||
{
|
{
|
||||||
tDebug( LOGVERBOSE ) << "Deleting old lucene stuff.";
|
tDebug( LOGVERBOSE ) << "Deleting old lucene stuff.";
|
||||||
|
|
||||||
m_luceneSearcher->close();
|
m_luceneSearcher->close();
|
||||||
m_luceneReader->close();
|
m_luceneReader->close();
|
||||||
delete m_luceneSearcher;
|
m_luceneSearcher.reset();
|
||||||
delete m_luceneReader;
|
m_luceneReader.reset();
|
||||||
m_luceneSearcher = 0;
|
|
||||||
m_luceneReader = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TomahawkUtils::removeDirectory( m_lucenePath );
|
TomahawkUtils::removeDirectory( m_lucenePath );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FuzzyIndex::updateIndex()
|
FuzzyIndex::updateIndex()
|
||||||
{
|
{
|
||||||
// NO-OP
|
// virtual NO-OP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -238,63 +218,60 @@ FuzzyIndex::search( const Tomahawk::query_ptr& query )
|
|||||||
{
|
{
|
||||||
if ( !m_luceneReader )
|
if ( !m_luceneReader )
|
||||||
{
|
{
|
||||||
if ( !IndexReader::indexExists( m_lucenePath.toStdString().c_str() ) )
|
if ( !IndexReader::indexExists( m_luceneDir ) )
|
||||||
{
|
{
|
||||||
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "index didn't exist.";
|
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "index didn't exist.";
|
||||||
return resultsmap;
|
return resultsmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_luceneReader = IndexReader::open( m_luceneDir );
|
m_luceneReader = IndexReader::open( m_luceneDir );
|
||||||
m_luceneSearcher = _CLNEW IndexSearcher( m_luceneReader );
|
m_luceneSearcher = newLucene<IndexSearcher>( m_luceneReader );
|
||||||
}
|
}
|
||||||
|
|
||||||
float minScore;
|
float minScore;
|
||||||
const TCHAR** fields = 0;
|
Collection<String> fields; // = newCollection<String>();
|
||||||
MultiFieldQueryParser parser( fields, m_analyzer );
|
MultiFieldQueryParserPtr parser = newLucene<MultiFieldQueryParser>( LuceneVersion::LUCENE_CURRENT, fields, m_analyzer );
|
||||||
BooleanQuery* qry = _CLNEW BooleanQuery();
|
BooleanQueryPtr qry = newLucene<BooleanQuery>();
|
||||||
|
|
||||||
if ( query->isFullTextQuery() )
|
if ( query->isFullTextQuery() )
|
||||||
{
|
{
|
||||||
QString escapedQuery = QString::fromWCharArray( parser.escape( Tomahawk::DatabaseImpl::sortname( query->fullTextQuery() ).toStdWString().c_str() ) );
|
QString q = Tomahawk::DatabaseImpl::sortname( query->fullTextQuery() );
|
||||||
|
|
||||||
Term* term = _CLNEW Term( _T( "track" ), escapedQuery.toStdWString().c_str() );
|
FuzzyQueryPtr fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"track", q.toStdWString() ) );
|
||||||
Query* fqry = _CLNEW FuzzyQuery( term );
|
qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::SHOULD );
|
||||||
qry->add( fqry, true, BooleanClause::SHOULD );
|
|
||||||
|
|
||||||
term = _CLNEW Term( _T( "artist" ), escapedQuery.toStdWString().c_str() );
|
fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"artist", q.toStdWString() ) );
|
||||||
fqry = _CLNEW FuzzyQuery( term );
|
qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::SHOULD );
|
||||||
qry->add( fqry, true, BooleanClause::SHOULD );
|
|
||||||
|
|
||||||
term = _CLNEW Term( _T( "fulltext" ), escapedQuery.toStdWString().c_str() );
|
fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"fulltext", q.toStdWString() ) );
|
||||||
fqry = _CLNEW FuzzyQuery( term );
|
qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::SHOULD );
|
||||||
qry->add( fqry, true, BooleanClause::SHOULD );
|
|
||||||
|
|
||||||
minScore = 0.00;
|
minScore = 0.00;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QString track = QString::fromWCharArray( parser.escape( Tomahawk::DatabaseImpl::sortname( query->queryTrack()->track() ).toStdWString().c_str() ) );
|
QString track = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->track() );
|
||||||
QString artist = QString::fromWCharArray( parser.escape( Tomahawk::DatabaseImpl::sortname( query->queryTrack()->artist() ).toStdWString().c_str() ) );
|
QString artist = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->artist() );
|
||||||
// QString album = QString::fromWCharArray( parser.escape( query->album().toStdWString().c_str() ) );
|
//QString album = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->album() );
|
||||||
|
|
||||||
Term* term = _CLNEW Term( _T( "track" ), track.toStdWString().c_str() );
|
FuzzyQueryPtr fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"track", track.toStdWString() ) );
|
||||||
Query* fqry = _CLNEW FuzzyQuery( term );
|
qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::MUST );
|
||||||
qry->add( fqry, true, BooleanClause::MUST );
|
|
||||||
|
|
||||||
term = _CLNEW Term( _T( "artist" ), artist.toStdWString().c_str() );
|
fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"artist", artist.toStdWString() ) );
|
||||||
fqry = _CLNEW FuzzyQuery( term );
|
qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::MUST );
|
||||||
qry->add( fqry, true, BooleanClause::MUST );
|
|
||||||
|
|
||||||
minScore = 0.00;
|
minScore = 0.00;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hits* hits = m_luceneSearcher->search( qry );
|
TopScoreDocCollectorPtr collector = TopScoreDocCollector::create( 50, false );
|
||||||
for ( uint i = 0; i < hits->length(); i++ )
|
m_luceneSearcher->search( qry, collector );
|
||||||
{
|
Collection<ScoreDocPtr> hits = collector->topDocs()->scoreDocs;
|
||||||
Document* d = &hits->doc( i );
|
|
||||||
|
|
||||||
float score = hits->score( i );
|
for ( int i = 0; i < collector->getTotalHits() && i < 50; i++ )
|
||||||
int id = QString::fromWCharArray( d->get( _T( "trackid" ) ) ).toInt();
|
{
|
||||||
|
DocumentPtr d = m_luceneSearcher->doc( hits[i]->doc );
|
||||||
|
float score = hits[i]->score;
|
||||||
|
int id = QString::fromStdWString( d->get( L"trackid" ) ).toInt();
|
||||||
|
|
||||||
if ( score > minScore )
|
if ( score > minScore )
|
||||||
{
|
{
|
||||||
@@ -302,13 +279,10 @@ FuzzyIndex::search( const Tomahawk::query_ptr& query )
|
|||||||
// tDebug() << "Index hit:" << id << score << QString::fromWCharArray( ((Query*)qry)->toString() );
|
// tDebug() << "Index hit:" << id << score << QString::fromWCharArray( ((Query*)qry)->toString() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete hits;
|
|
||||||
delete qry;
|
|
||||||
}
|
}
|
||||||
catch( CLuceneError& error )
|
catch( LuceneException& error )
|
||||||
{
|
{
|
||||||
tDebug() << "Caught CLucene error:" << error.what() << query->toString();
|
tDebug() << "Caught Lucene error:" << error.what() << query->toString();
|
||||||
|
|
||||||
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
|
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
|
||||||
}
|
}
|
||||||
@@ -329,27 +303,29 @@ FuzzyIndex::searchAlbum( const Tomahawk::query_ptr& query )
|
|||||||
{
|
{
|
||||||
if ( !m_luceneReader )
|
if ( !m_luceneReader )
|
||||||
{
|
{
|
||||||
if ( !IndexReader::indexExists( m_lucenePath.toStdString().c_str() ) )
|
if ( !IndexReader::indexExists( m_luceneDir ) )
|
||||||
{
|
{
|
||||||
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "index didn't exist.";
|
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "index didn't exist.";
|
||||||
return resultsmap;
|
return resultsmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_luceneReader = IndexReader::open( m_luceneDir );
|
m_luceneReader = IndexReader::open( m_luceneDir );
|
||||||
m_luceneSearcher = _CLNEW IndexSearcher( m_luceneReader );
|
m_luceneSearcher = newLucene<IndexSearcher>( m_luceneReader );
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryParser parser( _T( "album" ), m_analyzer );
|
QueryParserPtr parser = newLucene<QueryParser>( LuceneVersion::LUCENE_CURRENT, L"album", m_analyzer );
|
||||||
QString escapedName = QString::fromWCharArray( parser.escape( Tomahawk::DatabaseImpl::sortname( query->fullTextQuery() ).toStdWString().c_str() ) );
|
QString q = Tomahawk::DatabaseImpl::sortname( query->fullTextQuery() );
|
||||||
|
|
||||||
Query* qry = _CLNEW FuzzyQuery( _CLNEW Term( _T( "album" ), escapedName.toStdWString().c_str() ) );
|
FuzzyQueryPtr qry = newLucene<FuzzyQuery>( newLucene<Term>( L"album", q.toStdWString() ) );
|
||||||
Hits* hits = m_luceneSearcher->search( qry );
|
TopScoreDocCollectorPtr collector = TopScoreDocCollector::create( 99999, false );
|
||||||
for ( uint i = 0; i < hits->length(); i++ )
|
m_luceneSearcher->search( boost::dynamic_pointer_cast<Query>( qry ), collector );
|
||||||
|
Collection<ScoreDocPtr> hits = collector->topDocs()->scoreDocs;
|
||||||
|
|
||||||
|
for ( int i = 0; i < collector->getTotalHits(); i++ )
|
||||||
{
|
{
|
||||||
Document* d = &hits->doc( i );
|
DocumentPtr d = m_luceneSearcher->doc( hits[i]->doc );
|
||||||
|
float score = hits[i]->score;
|
||||||
float score = hits->score( i );
|
int id = QString::fromStdWString( d->get( L"albumid" ) ).toInt();
|
||||||
int id = QString::fromWCharArray( d->get( _T( "albumid" ) ) ).toInt();
|
|
||||||
|
|
||||||
if ( score > 0.30 )
|
if ( score > 0.30 )
|
||||||
{
|
{
|
||||||
@@ -357,13 +333,10 @@ FuzzyIndex::searchAlbum( const Tomahawk::query_ptr& query )
|
|||||||
// tDebug() << "Index hit:" << id << score;
|
// tDebug() << "Index hit:" << id << score;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete hits;
|
|
||||||
delete qry;
|
|
||||||
}
|
}
|
||||||
catch( CLuceneError& error )
|
catch( LuceneException& error )
|
||||||
{
|
{
|
||||||
tDebug() << "Caught CLucene error:" << error.what();
|
tDebug() << "Caught Lucene error:" << error.what();
|
||||||
|
|
||||||
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
|
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
*
|
*
|
||||||
* Copyright 2010-2013, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
* Copyright 2010-2014, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
||||||
*
|
*
|
||||||
* Tomahawk is free software: you can redistribute it and/or modify
|
* Tomahawk is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -25,30 +25,11 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
|
||||||
|
#include <lucene++/LuceneHeaders.h>
|
||||||
|
|
||||||
#include "Query.h"
|
#include "Query.h"
|
||||||
#include "database/DatabaseCommand_UpdateSearchIndex.h"
|
#include "database/DatabaseCommand_UpdateSearchIndex.h"
|
||||||
|
|
||||||
namespace lucene
|
|
||||||
{
|
|
||||||
namespace analysis
|
|
||||||
{
|
|
||||||
class SimpleAnalyzer;
|
|
||||||
}
|
|
||||||
namespace store
|
|
||||||
{
|
|
||||||
class Directory;
|
|
||||||
}
|
|
||||||
namespace index
|
|
||||||
{
|
|
||||||
class IndexReader;
|
|
||||||
class IndexWriter;
|
|
||||||
}
|
|
||||||
namespace search
|
|
||||||
{
|
|
||||||
class IndexSearcher;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FuzzyIndex : public QObject
|
class FuzzyIndex : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -87,11 +68,11 @@ private:
|
|||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
QString m_lucenePath;
|
QString m_lucenePath;
|
||||||
|
|
||||||
lucene::analysis::SimpleAnalyzer* m_analyzer;
|
boost::shared_ptr<Lucene::SimpleAnalyzer> m_analyzer;
|
||||||
lucene::store::Directory* m_luceneDir;
|
Lucene::IndexWriterPtr m_luceneWriter;
|
||||||
lucene::index::IndexReader* m_luceneReader;
|
Lucene::IndexReaderPtr m_luceneReader;
|
||||||
lucene::index::IndexWriter* m_luceneWriter;
|
Lucene::DirectoryPtr m_luceneDir;
|
||||||
lucene::search::IndexSearcher* m_luceneSearcher;
|
Lucene::IndexSearcherPtr m_luceneSearcher;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FUZZYINDEX_H
|
#endif // FUZZYINDEX_H
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
*
|
*
|
||||||
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
* Copyright 2010-2014, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
||||||
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
||||||
* Copyright 2013, Teo Mrnjavac <teo@kde.org>
|
* Copyright 2013, Teo Mrnjavac <teo@kde.org>
|
||||||
* Copyright 2013, Uwe L. Korn <uwelk@xhochy.com>
|
* Copyright 2013, Uwe L. Korn <uwelk@xhochy.com>
|
||||||
@@ -95,7 +95,7 @@ public:
|
|||||||
const QVariantMap& options );
|
const QVariantMap& options );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clucene indices for JS resolvers
|
* Lucene++ indices for JS resolvers
|
||||||
**/
|
**/
|
||||||
|
|
||||||
Q_INVOKABLE bool hasFuzzyIndex();
|
Q_INVOKABLE bool hasFuzzyIndex();
|
||||||
|
Reference in New Issue
Block a user