## Proposed changes pick from #38989
This commit is contained in:
@ -101,6 +101,18 @@ public class InvertedIndexUtil {
|
||||
return charFilterMap;
|
||||
}
|
||||
|
||||
public static boolean getInvertedIndexParserLowercase(Map<String, String> properties) {
|
||||
String lowercase = properties == null ? null : properties.get(INVERTED_INDEX_PARSER_LOWERCASE_KEY);
|
||||
// default is true if not set
|
||||
return lowercase != null ? Boolean.parseBoolean(lowercase) : true;
|
||||
}
|
||||
|
||||
public static String getInvertedIndexParserStopwords(Map<String, String> properties) {
|
||||
String stopwrods = properties == null ? null : properties.get(INVERTED_INDEX_PARSER_STOPWORDS_KEY);
|
||||
// default is "" if not set
|
||||
return stopwrods != null ? stopwrods : "";
|
||||
}
|
||||
|
||||
public static void checkInvertedIndexParser(String indexColName, PrimitiveType colType,
|
||||
Map<String, String> properties) throws AnalysisException {
|
||||
String parser = null;
|
||||
|
||||
@ -150,6 +150,8 @@ public class MatchPredicate extends Predicate {
|
||||
private String invertedIndexParser;
|
||||
private String invertedIndexParserMode;
|
||||
private Map<String, String> invertedIndexCharFilter;
|
||||
private boolean invertedIndexParserLowercase = true;
|
||||
private String invertedIndexParserStopwords = "";
|
||||
|
||||
public MatchPredicate(Operator op, Expr e1, Expr e2) {
|
||||
super();
|
||||
@ -170,23 +172,22 @@ public class MatchPredicate extends Predicate {
|
||||
invertedIndexParser = other.invertedIndexParser;
|
||||
invertedIndexParserMode = other.invertedIndexParserMode;
|
||||
invertedIndexCharFilter = other.invertedIndexCharFilter;
|
||||
invertedIndexParserLowercase = other.invertedIndexParserLowercase;
|
||||
invertedIndexParserStopwords = other.invertedIndexParserStopwords;
|
||||
}
|
||||
|
||||
/**
|
||||
* use for Nereids ONLY
|
||||
*/
|
||||
public MatchPredicate(Operator op, Expr e1, Expr e2, Type retType,
|
||||
NullableMode nullableMode, String invertedIndexParser, String invertedIndexParserMode,
|
||||
Map<String, String> invertedIndexCharFilter) {
|
||||
NullableMode nullableMode, Index invertedIndex) {
|
||||
this(op, e1, e2);
|
||||
if (invertedIndexParser != null) {
|
||||
this.invertedIndexParser = invertedIndexParser;
|
||||
}
|
||||
if (invertedIndexParserMode != null) {
|
||||
this.invertedIndexParserMode = invertedIndexParserMode;
|
||||
}
|
||||
if (invertedIndexParserMode != null) {
|
||||
this.invertedIndexCharFilter = invertedIndexCharFilter;
|
||||
if (invertedIndex != null) {
|
||||
this.invertedIndexParser = invertedIndex.getInvertedIndexParser();
|
||||
this.invertedIndexParserMode = invertedIndex.getInvertedIndexParserMode();
|
||||
this.invertedIndexCharFilter = invertedIndex.getInvertedIndexCharFilter();
|
||||
this.invertedIndexParserLowercase = invertedIndex.getInvertedIndexParserLowercase();
|
||||
this.invertedIndexParserStopwords = invertedIndex.getInvertedIndexParserStopwords();
|
||||
}
|
||||
fn = new Function(new FunctionName(op.name), Lists.newArrayList(e1.getType(), e2.getType()), retType,
|
||||
false, true, nullableMode);
|
||||
@ -220,6 +221,8 @@ public class MatchPredicate extends Predicate {
|
||||
msg.setOpcode(op.getOpcode());
|
||||
msg.match_predicate = new TMatchPredicate(invertedIndexParser, invertedIndexParserMode);
|
||||
msg.match_predicate.setCharFilterMap(invertedIndexCharFilter);
|
||||
msg.match_predicate.setParserLowercase(invertedIndexParserLowercase);
|
||||
msg.match_predicate.setParserStopwords(invertedIndexParserStopwords);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -264,6 +267,8 @@ public class MatchPredicate extends Predicate {
|
||||
invertedIndexParser = index.getInvertedIndexParser();
|
||||
invertedIndexParserMode = index.getInvertedIndexParserMode();
|
||||
invertedIndexCharFilter = index.getInvertedIndexCharFilter();
|
||||
invertedIndexParserLowercase = index.getInvertedIndexParserLowercase();
|
||||
invertedIndexParserStopwords = index.getInvertedIndexParserStopwords();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,6 +158,18 @@ public class Index implements Writable {
|
||||
return InvertedIndexUtil.getInvertedIndexCharFilter(properties);
|
||||
}
|
||||
|
||||
public boolean getInvertedIndexParserLowercase() {
|
||||
return InvertedIndexUtil.getInvertedIndexParserLowercase(properties);
|
||||
}
|
||||
|
||||
public String getInvertedIndexParserStopwords() {
|
||||
return InvertedIndexUtil.getInvertedIndexParserStopwords(properties);
|
||||
}
|
||||
|
||||
public boolean isLightIndexChangeSupported() {
|
||||
return indexType == IndexDef.IndexType.INVERTED;
|
||||
}
|
||||
|
||||
public String getComment() {
|
||||
return getComment(false);
|
||||
}
|
||||
|
||||
@ -32,7 +32,6 @@ import org.apache.doris.analysis.FunctionCallExpr;
|
||||
import org.apache.doris.analysis.FunctionName;
|
||||
import org.apache.doris.analysis.FunctionParams;
|
||||
import org.apache.doris.analysis.IndexDef;
|
||||
import org.apache.doris.analysis.InvertedIndexUtil;
|
||||
import org.apache.doris.analysis.IsNullPredicate;
|
||||
import org.apache.doris.analysis.LambdaFunctionCallExpr;
|
||||
import org.apache.doris.analysis.LambdaFunctionExpr;
|
||||
@ -106,9 +105,7 @@ import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -213,9 +210,7 @@ public class ExpressionTranslator extends DefaultExpressionVisitor<Expr, PlanTra
|
||||
|
||||
@Override
|
||||
public Expr visitMatch(Match match, PlanTranslatorContext context) {
|
||||
String invertedIndexParser = InvertedIndexUtil.INVERTED_INDEX_PARSER_UNKNOWN;
|
||||
String invertedIndexParserMode = InvertedIndexUtil.INVERTED_INDEX_PARSER_COARSE_GRANULARITY;
|
||||
Map<String, String> invertedIndexCharFilter = new HashMap<>();
|
||||
Index invertedIndex = null;
|
||||
// Get the first slot from match's left expr
|
||||
SlotRef left = (SlotRef) match.left().getInputSlots().stream().findFirst().get().accept(this, context);
|
||||
OlapTable olapTbl = Optional.ofNullable(getOlapTableFromSlotDesc(left.getDesc()))
|
||||
@ -231,9 +226,7 @@ public class ExpressionTranslator extends DefaultExpressionVisitor<Expr, PlanTra
|
||||
if (index.getIndexType() == IndexDef.IndexType.INVERTED) {
|
||||
List<String> columns = index.getColumns();
|
||||
if (columns != null && !columns.isEmpty() && left.getColumnName().equals(columns.get(0))) {
|
||||
invertedIndexParser = index.getInvertedIndexParser();
|
||||
invertedIndexParserMode = index.getInvertedIndexParserMode();
|
||||
invertedIndexCharFilter = index.getInvertedIndexCharFilter();
|
||||
invertedIndex = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -243,8 +236,7 @@ public class ExpressionTranslator extends DefaultExpressionVisitor<Expr, PlanTra
|
||||
MatchPredicate.Operator op = match.op();
|
||||
MatchPredicate matchPredicate = new MatchPredicate(op, match.left().accept(this, context),
|
||||
match.right().accept(this, context), match.getDataType().toCatalogDataType(),
|
||||
NullableMode.DEPEND_ON_ARGUMENT, invertedIndexParser, invertedIndexParserMode,
|
||||
invertedIndexCharFilter);
|
||||
NullableMode.DEPEND_ON_ARGUMENT, invertedIndex);
|
||||
matchPredicate.setNullableFromNereids(match.nullable());
|
||||
return matchPredicate;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user