This is an automated email from the ASF dual-hosted git repository. jianliangqi pushed a commit to branch clucene in repository https://gitbox.apache.org/repos/asf/doris-thirdparty.git
The following commit(s) were added to refs/heads/clucene by this push: new 6f8a21ff [feature](multi phrase) Add the MultiPhraseQuery interface (#138) 6f8a21ff is described below commit 6f8a21ffe15bd78a1cd3e685067ee5c9ed071827 Author: zzzxl <33418555+zzzxl1...@users.noreply.github.com> AuthorDate: Wed Nov 22 15:07:40 2023 +0800 [feature](multi phrase) Add the MultiPhraseQuery interface (#138) --- src/core/CLucene/search/MultiPhraseQuery.cpp | 27 +++++++++++++++++++++++++++ src/core/CLucene/search/MultiPhraseQuery.h | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/src/core/CLucene/search/MultiPhraseQuery.cpp b/src/core/CLucene/search/MultiPhraseQuery.cpp index 56fdf61b..54273702 100644 --- a/src/core/CLucene/search/MultiPhraseQuery.cpp +++ b/src/core/CLucene/search/MultiPhraseQuery.cpp @@ -305,6 +305,14 @@ void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase<CL_NS(index)::Term*>* te add(terms, position); } +void MultiPhraseQuery::add(std::vector<CL_NS(index)::Term*>& terms) { + int32_t position = 0; + if (positions->size() > 0) + position = (*positions)[positions->size()-1] + 1; + + add(terms, position); +} + void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase<CL_NS(index)::Term*>* _terms, const int32_t position) { if (termArrays->size() == 0) field = STRDUP_TtoT((*_terms)[0]->field()); @@ -321,6 +329,25 @@ void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase<CL_NS(index)::Term*>* _t termArrays->push_back(terms); positions->push_back(position); } + +void MultiPhraseQuery::add(std::vector<CL_NS(index)::Term*>& _terms, const int32_t position) { + if (termArrays->size() == 0) + field = STRDUP_TtoT((_terms)[0]->field()); + + CL_NS(util)::ArrayBase<CL_NS(index)::Term*>* terms = _CLNEW CL_NS(util)::ValueArray<CL_NS(index)::Term*>(_terms.size()); + for ( size_t i=0;i<_terms.size();i++ ){ + if ( _tcscmp(_terms[i]->field(), field) != 0) { + TCHAR buf[250]; + _sntprintf(buf,250,_T("All phrase terms must be in the same field (%s): %s"),field, (*terms)[i]->field()); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + } + terms->values[i] = _CL_POINTER(_terms[i]); + } + + termArrays->push_back(terms); + positions->push_back(position); +} + const CL_NS(util)::CLArrayList<CL_NS(util)::ArrayBase<CL_NS(index)::Term*>*>* MultiPhraseQuery::getTermArrays() { return termArrays; } diff --git a/src/core/CLucene/search/MultiPhraseQuery.h b/src/core/CLucene/search/MultiPhraseQuery.h index 86419e5b..68d9f76f 100644 --- a/src/core/CLucene/search/MultiPhraseQuery.h +++ b/src/core/CLucene/search/MultiPhraseQuery.h @@ -11,6 +11,8 @@ #include "CLucene/util/Array.h" #include "CLucene/util/VoidList.h" +#include <vector> + CL_CLASS_DEF(index,Term) CL_NS_DEF(search) @@ -66,6 +68,7 @@ public: * @see PhraseQuery#add(Term) */ void add(const CL_NS(util)::ArrayBase<CL_NS(index)::Term*>* terms); + void add(std::vector<CL_NS(index)::Term*>& terms); /** * Allows to specify the relative position of terms within the phrase. @@ -76,6 +79,7 @@ public: * @memory A pointer is taken of each term, the array memory must be cleaned up by calle */ void add(const CL_NS(util)::ArrayBase<CL_NS(index)::Term*>* terms, const int32_t position); + void add(std::vector<CL_NS(index)::Term*>& terms, const int32_t position); /** * Returns a ArrayBase<Term[]> of the terms in the multiphrase. --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org