diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2016-06-20 16:36:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-20 16:36:45 +0200 |
commit | a3057f2436aad98d7a07a6bd467c0cf7b3a3d924 (patch) | |
tree | 55fd3f1d24d1834a2ffc43ed6c018813841c16cf /searchcore | |
parent | fb2ad971b8f14d40a88d6a3cacd7744de244a09c (diff) | |
parent | 3c720effede799a8aed52b25dde45fb8b43acebf (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.cpp | 20 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/matching/querynodes.h | 31 |
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; |