From 024bc103751ccef2abe9de8632085a0594339df0 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Sat, 24 Sep 2016 16:02:25 +0000 Subject: Just get the term and th eindex name directly from the iterator. --- .../searchsummary/docsummary/dynamicteaserdfw.cpp | 43 ++++++++++------------ .../searchsummary/docsummary/keywordextractor.cpp | 41 ++++++++++----------- .../searchsummary/docsummary/keywordextractor.h | 4 +- 3 files changed, 41 insertions(+), 47 deletions(-) (limited to 'searchsummary') diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index 9a9041ea295..07eaad9807f 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -169,29 +169,27 @@ public: virtual const char *Index(const juniper::QueryItem* item, size_t *len) const { if (item->_si != NULL) { - const char *ret; - item->_si->getIndexName(&ret, len); - return ret; + *len = item->_si->getIndexName().size(); + return item->_si->getIndexName().c_str(); } else { + *len = item->_data->_indexlen; return item->_data->_index; } } virtual bool UsefulIndex(const juniper::QueryItem* item) const { - const char *buf; - size_t buflen; + vespalib::stringref index; if (_kwExtractor == NULL) return true; if (item->_si != NULL) { - item->_si->getIndexName(&buf, &buflen); + index = item->_si->getIndexName(); } else { - buf = item->_data->_index; - buflen = item->_data->_indexlen; + index = vespalib::stringref(item->_data->_index, item->_data->_indexlen); } - return _kwExtractor->IsLegalIndex(buf, buflen); + return _kwExtractor->IsLegalIndex(index); } }; @@ -203,8 +201,6 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const bool rc = true; search::SimpleQueryStackDumpIterator iterator(_buf); juniper::QueryItem item(&iterator); - const char *buf; - size_t buflen; if (_highlightTerms->numKeys() > 0) { v->VisitAND(&item, 2); @@ -234,14 +230,15 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const case search::ParseItem::ITEM_TERM: case search::ParseItem::ITEM_EXACTSTRINGTERM: case search::ParseItem::ITEM_PURE_WEIGHTED_STRING: - iterator.getTerm(&buf, &buflen); - v->VisitKeyword(&item, buf, buflen, false, isSpecialToken); + { + vespalib::stringref term = iterator.getTerm(); + v->VisitKeyword(&item, term.c_str(), term.size(), false, isSpecialToken); + } break; case search::ParseItem::ITEM_NUMTERM: - iterator.getTerm(&buf, &buflen); { - vespalib::string termStr(buf, buflen); - queryeval::SplitFloat splitter(termStr); + vespalib::string term = iterator.getTerm(); + queryeval::SplitFloat splitter(term); if (splitter.parts() > 1) { if (v->VisitPHRASE(&item, splitter.parts())) { for (size_t i = 0; i < splitter.parts(); ++i) { @@ -255,7 +252,7 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const splitter.getPart(0).c_str(), splitter.getPart(0).size(), false); } else { - v->VisitKeyword(&item, buf, buflen, false, true); + v->VisitKeyword(&item, term.c_str(), term.size(), false, true); } } break; @@ -269,16 +266,14 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const break; case search::ParseItem::ITEM_PREFIXTERM: case search::ParseItem::ITEM_SUBSTRINGTERM: - iterator.getTerm(&buf, &buflen); - v->VisitKeyword(&item, buf, buflen, true, isSpecialToken); + { + vespalib::stringref term = iterator.getTerm(); + v->VisitKeyword(&item, term.c_str(), term.size(), true, isSpecialToken); + } break; case search::ParseItem::ITEM_ANY: -#if (JUNIPER_RP_API_MINOR_VERSION >= 1) if (!v->VisitANY(&item, iterator.getArity())) -#else - if (!v->VisitOR(&item, iterator.getArity())) -#endif - rc = SkipItem(&iterator); + rc = SkipItem(&iterator); break; case search::ParseItem::ITEM_NEAR: if (!v->VisitNEAR(&item, iterator.getArity(),iterator.getArg1())) diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp index 6d567f9a6da..51025ab1034 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp @@ -111,10 +111,9 @@ KeywordExtractor::GetLegalIndexSpec() bool -KeywordExtractor::IsLegalIndex(const char *idxName, size_t idxNameLen) const +KeywordExtractor::IsLegalIndex(vespalib::stringref idxS) const { vespalib::string resolvedIdxName; - vespalib::string idxS(idxName, idxNameLen); if (_env != NULL) { resolvedIdxName = _env->lookupIndex(idxS); @@ -136,10 +135,8 @@ KeywordExtractor::IsLegalIndex(const char *idxName, size_t idxNameLen) const char * -KeywordExtractor::ExtractKeywords(const vespalib::stringref &buf) const +KeywordExtractor::ExtractKeywords(vespalib::stringref buf) const { - const char *str_ptr; - size_t str_len; search::SimpleQueryStackDumpIterator si(buf); char keywordstore[4096]; // Initial storage for keywords buffer search::RawBuf keywords(keywordstore, sizeof(keywordstore)); @@ -171,27 +168,28 @@ KeywordExtractor::ExtractKeywords(const vespalib::stringref &buf) const keywords.reset(); goto iteratorloopend; } else { - si.getIndexName(&str_ptr, &str_len); - if (!IsLegalIndex(str_ptr, str_len)) + if (!IsLegalIndex(si.getIndexName())) continue; // Found a term - si.getTerm(&str_ptr, &str_len); + vespalib::stringref term = si.getTerm(); search::ParseItem::ItemCreator term_creator = si.getCreator(); - if (str_len > 0 && useful(term_creator)) { + if ( !term.empty() && useful(term_creator)) { // Actual term to add - if (phraseterms_was_added) + if (phraseterms_was_added) { // Not the first term in the phrase keywords += " "; - else + } else { phraseterms_was_added = true; + } - keywords.append(str_ptr, str_len); + keywords.append(term.c_str(), term.size()); } } } - if (phraseterms_was_added) + if (phraseterms_was_added) { // Terms was added, so 0-terminate the string keywords.append("\0", 1); + } break; } @@ -200,15 +198,16 @@ KeywordExtractor::ExtractKeywords(const vespalib::stringref &buf) const case search::ParseItem::ITEM_EXACTSTRINGTERM: case search::ParseItem::ITEM_NUMTERM: case search::ParseItem::ITEM_TERM: - si.getIndexName(&str_ptr, &str_len); - if (!IsLegalIndex(str_ptr, str_len)) + if (!IsLegalIndex(si.getIndexName())) continue; - // add a new keyword - si.getTerm(&str_ptr, &str_len); - if (str_len > 0 && useful(creator)) { - // An actual string to add - keywords.append(str_ptr, str_len); - keywords.append("\0", 1); + { + // add a new keyword + vespalib::stringref term = si.getTerm(); + if ( !term.empty() && useful(creator)) { + // An actual string to add + keywords.append(term.c_str(), term.size()); + keywords.append("\0", 1); + } } break; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h index 750cfb2cdee..35c9d387317 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h @@ -135,7 +135,7 @@ public: * * @return true if the given index name is legal. **/ - bool IsLegalIndex(const char *idxName, size_t idxNameLen) const; + bool IsLegalIndex(vespalib::stringref idx) const; /** @@ -156,7 +156,7 @@ public: * @return Pointer to a buffer containing zero-terminated keywords, * with an empty word at the end. */ - char *ExtractKeywords(const vespalib::stringref &buf) const; + char *ExtractKeywords(vespalib::stringref buf) const; }; } -- cgit v1.2.3