Skip to content

Magic service query for text search. #1732

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 36 commits into from
Mar 18, 2025
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
184938b
First try at implementing structures to use the MagicServiceQuery for…
Flixtastic Jan 7, 2025
357b758
Fixed issues with MagicServiceQuery for word search. MagicServiceQuer…
Flixtastic Jan 8, 2025
fa09984
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Jan 8, 2025
e93f216
Split the TextSearchQuery to the WordSearch and EntitySearch. This al…
Flixtastic Jan 8, 2025
5aedb69
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Jan 9, 2025
0cc979b
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Jan 22, 2025
b968bb7
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Jan 24, 2025
6a7a477
Small changes
Flixtastic Jan 27, 2025
4a67b32
Removed attributes of entity and word scan that were redundant due to…
Flixtastic Jan 27, 2025
cb6710c
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Jan 27, 2025
50c846f
Score is now only shown when wanted
Flixtastic Jan 27, 2025
cee48c6
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Jan 28, 2025
2c65d22
Merge branch 'magic-service-query-text-search' of github.com:Flixtast…
Flixtastic Jan 28, 2025
4111bd3
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Feb 2, 2025
fd4b441
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Feb 10, 2025
06e8249
First try at a better structured service query for text search
Flixtastic Feb 10, 2025
b6fdd54
Changed the text search service to handle both entity and word search…
Flixtastic Feb 11, 2025
ad781f4
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Feb 11, 2025
aa57226
Merge branch 'ad-freiburg:master' into magic-service-query-text-search
Flixtastic Feb 13, 2025
5761b22
Reformatting the TextSearchQuery.cpp
Flixtastic Feb 13, 2025
a35975e
Moved the configs for word and entity search. Also slimmed out classe…
Flixtastic Feb 18, 2025
3dc5fcc
Added IRI to magic service query for entity search. Improved accuracy…
Flixtastic Feb 23, 2025
07b1a93
Added Tests for QueryPlanning for textsearch magic service query. Imp…
Flixtastic Feb 24, 2025
dd7b2e0
Merge branch 'master' into magic-service-query-text-search
Flixtastic Feb 24, 2025
8b7921e
Further test improvements. Small clean ups
Flixtastic Feb 24, 2025
d77bc2d
Refactor visitTextSearch and computeResult of Entity and Word Scan
Flixtastic Feb 25, 2025
c398627
Renaming of Variable names in TextSearch configs and of TextSearchQue…
Flixtastic Feb 25, 2025
28d11a8
Added comments for TextSearchQuery.h
Flixtastic Feb 25, 2025
957824d
Addressed Sonar issues
Flixtastic Mar 1, 2025
95a141a
Small suggested changes.
Flixtastic Mar 5, 2025
5a7bb3e
Added readable debugging information to TextSearchConfigs and updated…
Flixtastic Mar 5, 2025
8cd7b94
Addressed SonarQube issues.
Flixtastic Mar 5, 2025
fda30bd
Moving detailed description of TextIndexScanForEntity and TextIndexSc…
Flixtastic Mar 10, 2025
850890d
Adding documentation of text search feature
Flixtastic Mar 10, 2025
5188a99
Fixing SonarQube issues.
Flixtastic Mar 10, 2025
d4707a6
Moved the operator definition to the cpp file again
Flixtastic Mar 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/engine/CheckUsePatternTrick.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,12 @@
} else if constexpr (std::is_same_v<T, p::Service>) {
return ad_utility::contains(arg.visibleVariables_, variable);
} else {
static_assert(
std::is_same_v<T, p::TransPath> || std::is_same_v<T, p::PathQuery> ||
std::is_same_v<T, p::Describe> || std::is_same_v<T, p::SpatialQuery>);
static_assert(std::is_same_v<T, p::TransPath> ||
std::is_same_v<T, p::PathQuery> ||
std::is_same_v<T, p::Describe> ||
std::is_same_v<T, p::SpatialQuery> ||
std::is_same_v<T, p::WordSearchQuery> ||
std::is_same_v<T, p::EntitySearchQuery>);

Check warning on line 80 in src/engine/CheckUsePatternTrick.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/CheckUsePatternTrick.cpp#L75-L80

Added lines #L75 - L80 were not covered by tests
// The `TransPath` is set up later in the query planning, when this
// function should not be called anymore.
AD_FAIL();
Expand Down
24 changes: 24 additions & 0 deletions src/engine/QueryPlanner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2358,6 +2358,10 @@
visitDescribe(arg);
} else if constexpr (std::is_same_v<T, p::SpatialQuery>) {
visitSpatialSearch(arg);
} else if constexpr (std::is_same_v<T, p::WordSearchQuery>) {
visitWordSearch(arg);
} else if constexpr (std::is_same_v<T, p::EntitySearchQuery>) {
visitEntitySearch(arg);
} else {
static_assert(std::is_same_v<T, p::BasicGraphPattern>);
visitBasicGraphPattern(arg);
Expand Down Expand Up @@ -2531,6 +2535,26 @@
visitGroupOptionalOrMinus(std::move(candidatesOut));
}

// _______________________________________________________________
void QueryPlanner::GraphPatternPlanner::visitWordSearch(
parsedQuery::WordSearchQuery& wordSearchQuery) {
auto config = wordSearchQuery.toTextIndexScanForWordConfiguration();
std::vector<SubtreePlan> candidatesOut;
auto plan = makeSubtreePlan<TextIndexScanForWord>(qec_, config);
candidatesOut.push_back(std::move(plan));
visitGroupOptionalOrMinus(std::move(candidatesOut));
}

Check warning on line 2546 in src/engine/QueryPlanner.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/QueryPlanner.cpp#L2540-L2546

Added lines #L2540 - L2546 were not covered by tests

// _______________________________________________________________
void QueryPlanner::GraphPatternPlanner::visitEntitySearch(
parsedQuery::EntitySearchQuery& entitySearchQuery) {
auto config = entitySearchQuery.toTextIndexScanForEntityConfiguration();
std::vector<SubtreePlan> candidatesOut;
auto plan = makeSubtreePlan<TextIndexScanForEntity>(qec_, config);
candidatesOut.push_back(std::move(plan));
visitGroupOptionalOrMinus(std::move(candidatesOut));
}

Check warning on line 2556 in src/engine/QueryPlanner.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/QueryPlanner.cpp#L2550-L2556

Added lines #L2550 - L2556 were not covered by tests

// _______________________________________________________________
void QueryPlanner::GraphPatternPlanner::visitUnion(parsedQuery::Union& arg) {
// TODO<joka921> here we could keep all the candidates, and create a
Expand Down
2 changes: 2 additions & 0 deletions src/engine/QueryPlanner.h
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,8 @@ class QueryPlanner {
void visitTransitivePath(parsedQuery::TransPath& transitivePath);
void visitPathSearch(parsedQuery::PathQuery& config);
void visitSpatialSearch(parsedQuery::SpatialQuery& config);
void visitWordSearch(parsedQuery::WordSearchQuery& config);
void visitEntitySearch(parsedQuery::EntitySearchQuery& config);
void visitUnion(parsedQuery::Union& un);
void visitSubquery(parsedQuery::Subquery& subquery);
void visitDescribe(parsedQuery::Describe& describe);
Expand Down
58 changes: 43 additions & 15 deletions src/engine/TextIndexScanForEntity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,29 @@

#include "engine/TextIndexScanForEntity.h"

// _____________________________________________________________________________
TextIndexScanForEntity::TextIndexScanForEntity(
QueryExecutionContext* qec, TextIndexScanForEntityConfiguration config)
: Operation(qec),
config_(std::move(config)),
textRecordVar_(config_.varToBindText_),
varOrFixed_(qec, config_.entity_),
word_(config_.word_) {
setVariableToColumnMap();
}

Check warning on line 16 in src/engine/TextIndexScanForEntity.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/TextIndexScanForEntity.cpp#L14-L16

Added lines #L14 - L16 were not covered by tests

// _____________________________________________________________________________
TextIndexScanForEntity::TextIndexScanForEntity(
QueryExecutionContext* qec, Variable textRecordVar,
std::variant<Variable, std::string> entity, string word)
: Operation(qec),
textRecordVar_(std::move(textRecordVar)),
varOrFixed_(qec, std::move(entity)),
word_(std::move(word)) {}
config_(TextIndexScanForEntityConfiguration{textRecordVar, entity, word,
std::nullopt}),
textRecordVar_(config_.varToBindText_),
varOrFixed_(qec, config_.entity_),
word_(config_.word_) {
setVariableToColumnMap();
}

// _____________________________________________________________________________
ProtoResult TextIndexScanForEntity::computeResult(
Expand Down Expand Up @@ -43,21 +58,34 @@
}

// _____________________________________________________________________________
VariableToColumnMap TextIndexScanForEntity::computeVariableToColumnMap() const {
VariableToColumnMap vcmap;
auto addDefinedVar = [&vcmap,
index = ColumnIndex{0}](const Variable& var) mutable {
vcmap[var] = makeAlwaysDefinedColumn(index);
++index;
};
addDefinedVar(textRecordVar_);
void TextIndexScanForEntity::setVariableToColumnMap() {
ColumnIndex index = ColumnIndex{0};
variableColumns_[textRecordVar_] = makeAlwaysDefinedColumn(index);
index++;
if (hasFixedEntity()) {
addDefinedVar(textRecordVar_.getEntityScoreVariable(fixedEntity()));
if (config_.varToBindScore_.has_value()) {
variableColumns_[config_.varToBindScore_.value()] =
makeAlwaysDefinedColumn(index);

Check warning on line 68 in src/engine/TextIndexScanForEntity.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/TextIndexScanForEntity.cpp#L67-L68

Added lines #L67 - L68 were not covered by tests
} else {
variableColumns_[textRecordVar_.getEntityScoreVariable(fixedEntity())] =
makeAlwaysDefinedColumn(index);
}
} else {
addDefinedVar(entityVariable());
addDefinedVar(textRecordVar_.getEntityScoreVariable(entityVariable()));
variableColumns_[entityVariable()] = makeAlwaysDefinedColumn(index);
index++;
if (config_.varToBindScore_.has_value()) {
variableColumns_[config_.varToBindScore_.value()] =
makeAlwaysDefinedColumn(index);

Check warning on line 78 in src/engine/TextIndexScanForEntity.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/TextIndexScanForEntity.cpp#L77-L78

Added lines #L77 - L78 were not covered by tests
} else {
variableColumns_[textRecordVar_.getEntityScoreVariable(
entityVariable())] = makeAlwaysDefinedColumn(index);
}
}
return vcmap;
}

// _____________________________________________________________________________
VariableToColumnMap TextIndexScanForEntity::computeVariableToColumnMap() const {
return variableColumns_;
}

// _____________________________________________________________________________
Expand Down
21 changes: 18 additions & 3 deletions src/engine/TextIndexScanForEntity.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@
#include <string>

#include "./Operation.h"
#include "parser/MagicServiceQuery.h"

struct TextIndexScanForEntityConfiguration {
Variable varToBindText_;
std::variant<Variable, std::string> entity_;
std::string word_;
std::optional<Variable> varToBindScore_;
};

// This operation retrieves all text records and their corresponding
// entities from the fulltext index that contain a certain word or prefix.
Expand Down Expand Up @@ -48,11 +56,16 @@ class TextIndexScanForEntity : public Operation {
}
};

const Variable textRecordVar_;
const VarOrFixedEntity varOrFixed_;
const string word_;
TextIndexScanForEntityConfiguration config_;
VariableToColumnMap variableColumns_;
Variable textRecordVar_;
VarOrFixedEntity varOrFixed_;
string word_;

public:
TextIndexScanForEntity(QueryExecutionContext* qec,
TextIndexScanForEntityConfiguration config);

TextIndexScanForEntity(QueryExecutionContext* qec, Variable textRecordVar,
std::variant<Variable, std::string> entity,
string word);
Expand Down Expand Up @@ -93,6 +106,8 @@ class TextIndexScanForEntity : public Operation {

vector<ColumnIndex> resultSortedOn() const override;

void setVariableToColumnMap();

VariableToColumnMap computeVariableToColumnMap() const override;

private:
Expand Down
58 changes: 43 additions & 15 deletions src/engine/TextIndexScanForWord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,28 @@

#include "engine/TextIndexScanForWord.h"

// _____________________________________________________________________________
TextIndexScanForWord::TextIndexScanForWord(
QueryExecutionContext* qec, TextIndexScanForWordConfiguration config)
: Operation(qec),
config_(std::move(config)),
textRecordVar_(config_.varToBindText_),
word_(config_.word),
isPrefix_(word_.ends_with('*')) {
setVariableToColumnMap();
}

Check warning on line 16 in src/engine/TextIndexScanForWord.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/TextIndexScanForWord.cpp#L14-L16

Added lines #L14 - L16 were not covered by tests

// _____________________________________________________________________________
TextIndexScanForWord::TextIndexScanForWord(QueryExecutionContext* qec,
Variable textRecordVar, string word)
: Operation(qec),
textRecordVar_(std::move(textRecordVar)),
word_(std::move(word)),
isPrefix_(word_.ends_with('*')) {}
config_(TextIndexScanForWordConfiguration{textRecordVar, word,
std::nullopt, std::nullopt}),
textRecordVar_(config_.varToBindText_),
word_(config_.word),
isPrefix_(word_.ends_with('*')) {
setVariableToColumnMap();
}

// _____________________________________________________________________________
ProtoResult TextIndexScanForWord::computeResult(
Expand All @@ -33,20 +48,33 @@
}

// _____________________________________________________________________________
VariableToColumnMap TextIndexScanForWord::computeVariableToColumnMap() const {
VariableToColumnMap vcmap;
auto addDefinedVar = [&vcmap,
index = ColumnIndex{0}](const Variable& var) mutable {
vcmap[var] = makeAlwaysDefinedColumn(index);
++index;
};
addDefinedVar(textRecordVar_);
void TextIndexScanForWord::setVariableToColumnMap() {
ColumnIndex index = ColumnIndex{0};
variableColumns_[textRecordVar_] = makeAlwaysDefinedColumn(index);
index++;
if (isPrefix_) {
addDefinedVar(textRecordVar_.getMatchingWordVariable(
std::string_view(word_).substr(0, word_.size() - 1)));
if (config_.varToBindMatch_.has_value()) {
variableColumns_[config_.varToBindMatch_.value()] =
makeAlwaysDefinedColumn(index);

Check warning on line 58 in src/engine/TextIndexScanForWord.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/TextIndexScanForWord.cpp#L57-L58

Added lines #L57 - L58 were not covered by tests
} else {
variableColumns_[textRecordVar_.getMatchingWordVariable(
std::string_view(word_).substr(0, word_.size() - 1))] =
makeAlwaysDefinedColumn(index);
}
index++;
}
addDefinedVar(textRecordVar_.getWordScoreVariable(word_, isPrefix_));
return vcmap;
if (config_.varToBindScore_.has_value()) {
variableColumns_[config_.varToBindScore_.value()] =
makeAlwaysDefinedColumn(index);

Check warning on line 68 in src/engine/TextIndexScanForWord.cpp

View check run for this annotation

Codecov / codecov/patch

src/engine/TextIndexScanForWord.cpp#L67-L68

Added lines #L67 - L68 were not covered by tests
} else {
variableColumns_[textRecordVar_.getWordScoreVariable(word_, isPrefix_)] =
makeAlwaysDefinedColumn(index);
}
}

// _____________________________________________________________________________
VariableToColumnMap TextIndexScanForWord::computeVariableToColumnMap() const {
return variableColumns_;
}

// _____________________________________________________________________________
Expand Down
19 changes: 17 additions & 2 deletions src/engine/TextIndexScanForWord.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,29 @@
#include <string>

#include "./Operation.h"
#include "parser/MagicServiceQuery.h"

struct TextIndexScanForWordConfiguration {
Variable varToBindText_;
string word;
std::optional<Variable> varToBindMatch_;
std::optional<Variable> varToBindScore_;
};

// This operation retrieves all text records from the fulltext index that
// contain a certain word or prefix.
class TextIndexScanForWord : public Operation {
private:
const Variable textRecordVar_;
const string word_;
TextIndexScanForWordConfiguration config_;
VariableToColumnMap variableColumns_;
Variable textRecordVar_;
string word_;
bool isPrefix_ = false;

public:
TextIndexScanForWord(QueryExecutionContext* qec,
TextIndexScanForWordConfiguration config);

TextIndexScanForWord(QueryExecutionContext* qec, Variable textRecordVar,
string word);

Expand Down Expand Up @@ -45,6 +58,8 @@ class TextIndexScanForWord : public Operation {

vector<ColumnIndex> resultSortedOn() const override;

void setVariableToColumnMap();

VariableToColumnMap computeVariableToColumnMap() const override;

private:
Expand Down
2 changes: 2 additions & 0 deletions src/parser/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ add_library(parser
Literal.cpp
LiteralOrIri.cpp
DatasetClauses.cpp
WordSearchQuery.cpp
EntitySearchQuery.cpp
)
qlever_target_link_libraries(parser sparqlParser parserData sparqlExpressions rdfEscaping re2::re2 util engine index)

72 changes: 72 additions & 0 deletions src/parser/EntitySearchQuery.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright 2024, University of Freiburg,
// Chair of Algorithms and Data Structures.
// Author: Felix Meisen (fesemeisen@outlook.de)

#include "parser/EntitySearchQuery.h"

#include "parser/MagicServiceIriConstants.h"

namespace parsedQuery {

// ____________________________________________________________________________
void EntitySearchQuery::addParameter(const SparqlTriple& triple) {
auto sipmleTriple = triple.getSimple();
TripleComponent predicate = sipmleTriple.p_;
TripleComponent object = sipmleTriple.o_;

Check warning on line 15 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L12-L15

Added lines #L12 - L15 were not covered by tests

auto predString = extractParameterName(predicate, ENTITY_SEARCH_IRI);

Check warning on line 17 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L17

Added line #L17 was not covered by tests

// TODO find a smoother way to interpret given strings than reading them as
// literals
if (predString == "containedWithWord") {
if (!object.isLiteral()) {
throw EntitySearchException(
"The parameter <containedWithWord> expects a literal consisting of "
"one search word");
}
std::string_view literal = object.getLiteral().toStringRepresentation();
word_ = std::string(literal.substr(1, literal.size() - 2));

Check warning on line 28 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L23-L28

Added lines #L23 - L28 were not covered by tests
} else if (predString == "containsEntity") {
if (object.isLiteral()) {
std::string_view literal = object.getLiteral().toStringRepresentation();
fixedEntity_ = std::string(literal.substr(1, literal.size() - 2));

Check warning on line 32 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L31-L32

Added lines #L31 - L32 were not covered by tests
} else if (object.isVariable()) {
setVariable("containsEntity", object, entityVar_);
} else {
throw EntitySearchException(
"The parameter <containsEntity> expects a literal which is "
"interpreted as fixed entity or a variable to bind the entity to");
}

Check warning on line 39 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L34-L39

Added lines #L34 - L39 were not covered by tests
} else if (predString == "bindScore") {
setVariable("bindScore", object, scoreVar_);

Check warning on line 41 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L41

Added line #L41 was not covered by tests
} else if (predString == "bindText") {
setVariable("bindText", object, textVar_);
}
}

Check warning on line 45 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L43-L45

Added lines #L43 - L45 were not covered by tests

// ____________________________________________________________________________
TextIndexScanForEntityConfiguration
EntitySearchQuery::toTextIndexScanForEntityConfiguration() const {

Check warning on line 49 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L49

Added line #L49 was not covered by tests
if (!word_.has_value()) {
throw EntitySearchException(
"Missing parameter <containedWithWord> in entity search.");

Check warning on line 52 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L51-L52

Added lines #L51 - L52 were not covered by tests
} else if (!textVar_.has_value()) {
throw EntitySearchException(
"Missing parameter <bindText> in entity search.");

Check warning on line 55 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L54-L55

Added lines #L54 - L55 were not covered by tests
} else if (!(fixedEntity_.has_value() || entityVar_.has_value())) {
throw EntitySearchException(
"Missing parameter <containsEntity> in entity search.");

Check warning on line 58 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L57-L58

Added lines #L57 - L58 were not covered by tests
} else if (fixedEntity_.has_value() && entityVar_.has_value()) {
throw EntitySearchException(
"<containsEntity> should be used exactly once in entity search.");
}

Check warning on line 62 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L60-L62

Added lines #L60 - L62 were not covered by tests
if (entityVar_.has_value()) {
return TextIndexScanForEntityConfiguration{
textVar_.value(), entityVar_.value(), word_.value(), scoreVar_};
} else {
return TextIndexScanForEntityConfiguration{
textVar_.value(), fixedEntity_.value(), word_.value(), scoreVar_};
}
}

Check warning on line 70 in src/parser/EntitySearchQuery.cpp

View check run for this annotation

Codecov / codecov/patch

src/parser/EntitySearchQuery.cpp#L64-L70

Added lines #L64 - L70 were not covered by tests

} // namespace parsedQuery
Loading
Loading