aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-09-24 16:02:25 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2016-09-24 16:02:25 +0000
commit024bc103751ccef2abe9de8632085a0594339df0 (patch)
treee1472e28736a0d3ef947916c2f221ed7b4fa1f38 /searchsummary
parentdbe9a97ea5cdd14a7043d6ffbb40ea3121b06c98 (diff)
Just get the term and th eindex name directly from the iterator.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp43
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp41
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h4
3 files changed, 41 insertions, 47 deletions
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;
};
}