summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-06-20 16:36:45 +0200
committerGitHub <noreply@github.com>2016-06-20 16:36:45 +0200
commita3057f2436aad98d7a07a6bd467c0cf7b3a3d924 (patch)
tree55fd3f1d24d1834a2ffc43ed6c018813841c16cf
parentfb2ad971b8f14d40a88d6a3cacd7744de244a09c (diff)
parent3c720effede799a8aed52b25dde45fb8b43acebf (diff)
Merge pull request #12 from yahoo/balder/micro-optimize-query-setup-based-on-gemini
Balder/micro optimize query setup based on gemini
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp20
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/querynodes.h31
-rw-r--r--searchlib/src/vespa/searchlib/features/item_raw_score_feature.cpp11
-rw-r--r--searchlib/src/vespa/searchlib/fef/simpletermdata.h16
-rw-r--r--searchlib/src/vespa/searchlib/fef/simpletermfielddata.h4
5 files changed, 38 insertions, 44 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp b/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp
index 2acb9c3a165..8667cdb234b 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp
@@ -24,7 +24,6 @@ using search::fef::FieldType;
using search::fef::IIndexEnvironment;
using search::fef::MatchData;
using search::fef::MatchDataLayout;
-using search::fef::SimpleTermData;
using search::fef::TermFieldHandle;
using search::query::Node;
using search::query::TemplateTermVisitor;
@@ -109,25 +108,12 @@ ProtonTermData::setDocumentFrequency(uint32_t estHits, uint32_t docIdLimit)
}
}
-size_t
-ProtonTermData::numFields() const
-{
- return _fields.size();
-}
-
-const ProtonTermData::FieldEntry &
-ProtonTermData::field(size_t i) const
-{
- assert(i < _fields.size());
- return _fields[i];
-}
-
const ProtonTermData::FieldEntry *
ProtonTermData::lookupField(uint32_t fieldId) const
{
- for (size_t i = 0; i < numFields(); ++i) {
- if (field(i).getFieldId() == fieldId) {
- return &field(i);
+ for (size_t i = 0; i < _fields.size(); ++i) {
+ if (_fields[i].getFieldId() == fieldId) {
+ return &_fields[i];
}
}
return 0;
diff --git a/searchcore/src/vespa/searchcore/proton/matching/querynodes.h b/searchcore/src/vespa/searchcore/proton/matching/querynodes.h
index 63052d633d1..b0f844b779c 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/querynodes.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/querynodes.h
@@ -27,7 +27,7 @@ class ProtonTermData : public search::fef::ITermData
public:
typedef search::queryeval::FieldSpec FieldSpec;
- struct FieldEntry : search::fef::SimpleTermFieldData {
+ struct FieldEntry final : search::fef::SimpleTermFieldData {
vespalib::string field_name;
bool attribute_field;
bool filter_field;
@@ -42,7 +42,7 @@ public:
return FieldSpec(field_name, getFieldId(),
getHandle(), filter_field);
}
- virtual search::fef::TermFieldHandle getHandle() const;
+ search::fef::TermFieldHandle getHandle() const override;
};
private:
@@ -62,9 +62,9 @@ public:
void setDocumentFrequency(uint32_t estHits, uint32_t numDocs);
// ITermData interface
- virtual size_t numFields() const;
- virtual const FieldEntry &field(size_t i) const;
- virtual const FieldEntry *lookupField(uint32_t fieldId) const;
+ size_t numFields() const override final { return _fields.size(); }
+ const FieldEntry &field(size_t i) const override final { return _fields[i]; }
+ const FieldEntry *lookupField(uint32_t fieldId) const override final;
};
namespace {
@@ -76,8 +76,8 @@ uint32_t numTerms<search::query::Phrase>(const search::query::Phrase &n) {
} // namespace proton::matching::<unnamed>
template <typename Base>
-struct ProtonTerm : public Base,
- public ProtonTermData
+struct ProtonTermBase : public Base,
+ public ProtonTermData
{
using Base::Base;
@@ -89,10 +89,15 @@ struct ProtonTerm : public Base,
}
// ITermData interface
- virtual uint32_t getPhraseLength() const { return numTerms<Base>(*this); }
- virtual uint32_t getTermIndex() const { return -1; }
- virtual search::query::Weight getWeight() const { return Base::getWeight(); }
- virtual uint32_t getUniqueId() const { return Base::getId(); }
+ uint32_t getPhraseLength() const override final { return numTerms<Base>(*this); }
+ uint32_t getTermIndex() const override final { return -1; }
+ search::query::Weight getWeight() const override final { return Base::getWeight(); }
+ uint32_t getUniqueId() const override final { return Base::getId(); }
+};
+
+template <typename Base>
+struct ProtonTerm : public ProtonTermBase<Base> {
+ using ProtonTermBase<Base>::ProtonTermBase;
};
typedef search::query::SimpleAnd ProtonAnd;
@@ -103,10 +108,10 @@ typedef search::query::SimpleOr ProtonOr;
typedef search::query::SimpleRank ProtonRank;
typedef search::query::SimpleWeakAnd ProtonWeakAnd;
-struct ProtonEquiv : public ProtonTerm<search::query::Equiv>
+struct ProtonEquiv final : public ProtonTermBase<search::query::Equiv>
{
search::fef::MatchDataLayout children_mdl;
- using ProtonTerm::ProtonTerm;
+ using ProtonTermBase::ProtonTermBase;
};
typedef ProtonTerm<search::query::LocationTerm> ProtonLocationTerm;
diff --git a/searchlib/src/vespa/searchlib/features/item_raw_score_feature.cpp b/searchlib/src/vespa/searchlib/features/item_raw_score_feature.cpp
index 1fc8203a58e..a4dfc4821df 100644
--- a/searchlib/src/vespa/searchlib/features/item_raw_score_feature.cpp
+++ b/searchlib/src/vespa/searchlib/features/item_raw_score_feature.cpp
@@ -68,10 +68,13 @@ ItemRawScoreBlueprint::resolve(const search::fef::IQueryEnvironment &env,
{
HandleVector handles;
const ITermData *term = util::getTermByLabel(env, label);
- for (uint32_t i = 0; (term != 0) && (i < term->numFields()); ++i) {
- TermFieldHandle handle = term->field(i).getHandle();
- if (handle != IllegalHandle) {
- handles.push_back(handle);
+ if (term != nullptr) {
+ uint32_t numFields(term->numFields());
+ for (uint32_t i(0); i < numFields; ++i) {
+ TermFieldHandle handle = term->field(i).getHandle();
+ if (handle != IllegalHandle) {
+ handles.push_back(handle);
+ }
}
}
return handles;
diff --git a/searchlib/src/vespa/searchlib/fef/simpletermdata.h b/searchlib/src/vespa/searchlib/fef/simpletermdata.h
index ee4cab468e1..68d6dcd1160 100644
--- a/searchlib/src/vespa/searchlib/fef/simpletermdata.h
+++ b/searchlib/src/vespa/searchlib/fef/simpletermdata.h
@@ -14,7 +14,7 @@ namespace fef {
/**
* Static match data for a single unit (term/phrase/etc).
**/
-class SimpleTermData : public ITermData
+class SimpleTermData final : public ITermData
{
private:
query::Weight _weight;
@@ -40,37 +40,37 @@ public:
/**
* Returns the term weight.
**/
- virtual query::Weight getWeight() const { return _weight; }
+ query::Weight getWeight() const override { return _weight; }
/**
* Returns the number of terms represented by this term data object.
**/
- virtual uint32_t getPhraseLength() const { return _numTerms; }
+ uint32_t getPhraseLength() const override { return _numTerms; }
/**
* Obtain the location of this term in the original user query.
*
* @return term index
**/
- virtual uint32_t getTermIndex() const { return _termIndex; }
+ uint32_t getTermIndex() const override { return _termIndex; }
/**
* Obtain the unique id of this term. 0 means not set.
*
* @return unique id or 0
**/
- virtual uint32_t getUniqueId() const { return _uniqueId; }
+ uint32_t getUniqueId() const override { return _uniqueId; }
/**
* Get number of fields searched
**/
- virtual size_t numFields() const { return _fields.size(); }
+ size_t numFields() const override { return _fields.size(); }
/**
* Direct access to data for individual fields
* @param i local index, must have: 0 <= i < numFields()
*/
- virtual const ITermFieldData &field(size_t i) const {
+ const ITermFieldData &field(size_t i) const override {
return _fields[i];
}
@@ -81,7 +81,7 @@ public:
*
* @return term field data, or NULL if not found
**/
- virtual const ITermFieldData *lookupField(uint32_t fieldId) const {
+ const ITermFieldData *lookupField(uint32_t fieldId) const override {
for (size_t fieldIdx(0), m(numFields()); fieldIdx < m; ++fieldIdx) {
const ITermFieldData &tfd = field(fieldIdx);
if (tfd.getFieldId() == fieldId) {
diff --git a/searchlib/src/vespa/searchlib/fef/simpletermfielddata.h b/searchlib/src/vespa/searchlib/fef/simpletermfielddata.h
index f95ca5b3472..190ae8e80d2 100644
--- a/searchlib/src/vespa/searchlib/fef/simpletermfielddata.h
+++ b/searchlib/src/vespa/searchlib/fef/simpletermfielddata.h
@@ -38,14 +38,14 @@ public:
*
* @return field id
**/
- virtual uint32_t getFieldId() const { return _fieldId; }
+ uint32_t getFieldId() const override final { return _fieldId; }
/**
* Obtain the document frequency.
*
* @return document frequency
**/
- virtual double getDocFreq() const { return _docFreq; }
+ double getDocFreq() const override final { return _docFreq; }
/**
* Obtain the match handle for this field.