aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.h
blob: d98f689fa3fb8a7693f6f4a4e57fcf1ecb7bfcc8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#pragma once

#include "i_docsum_field_writer_factory.h"

namespace search { class MatchingElementsFields; }

namespace search::docsummary {

class IDocsumEnvironment;
class IQueryTermFilterFactory;

/*
 * Factory class for creating docsum field writers.
 */
class DocsumFieldWriterFactory : public IDocsumFieldWriterFactory
{
    bool _use_v8_geo_positions;
    const IDocsumEnvironment& _env;
    const IQueryTermFilterFactory& _query_term_filter_factory;
protected:
    static void throw_missing_source(const vespalib::string& command);
    const IDocsumEnvironment& getEnvironment() const noexcept { return _env; }
    bool has_attribute_manager() const noexcept;
public:
    DocsumFieldWriterFactory(bool use_v8_geo_positions, const IDocsumEnvironment& env, const IQueryTermFilterFactory& query_term_filter_factory);
    ~DocsumFieldWriterFactory() override;
    std::unique_ptr<DocsumFieldWriter> create_docsum_field_writer(const vespalib::string& field_name,
                                                                  const vespalib::string& command,
                                                                  const vespalib::string& source,
                                                                  std::shared_ptr<MatchingElementsFields> matching_elems_fields) override;
};

}