summaryrefslogtreecommitdiffstats
path: root/searchcore
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 /searchcore
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
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp20
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/querynodes.h31
2 files changed, 21 insertions, 30 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;