blob: 1e133d0b8f458672346ec14aca6e737633c3eac0 (
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchdefinition;
import com.yahoo.searchlib.rankingexpression.Reference;
import java.util.Optional;
import java.util.regex.Pattern;
/**
* Utility methods for query, document and constant rank feature names
*
* @author bratseth
*/
public class FeatureNames {
private static final Pattern identifierRegexp = Pattern.compile("[A-Za-z0-9_][A-Za-z0-9_-]*");
public static Reference asConstantFeature(String constantName) {
return Reference.simple("constant", quoteIfNecessary(constantName));
}
public static Reference asAttributeFeature(String attributeName) {
return Reference.simple("attribute", quoteIfNecessary(attributeName));
}
public static Reference asQueryFeature(String propertyName) {
return Reference.simple("query", quoteIfNecessary(propertyName));
}
/** Returns true if the given reference is an attribute, constant or query feature */
public static boolean isSimpleFeature(Reference reference) {
if ( ! reference.isSimple()) return false;
String name = reference.name();
return name.equals("attribute") || name.equals("constant") || name.equals("query");
}
/** Returns true if this is a constant */
public static boolean isConstantFeature(Reference reference) {
if ( ! isSimpleFeature(reference)) return false;
return reference.name().equals("constant");
}
/**
* Returns the single argument of the given feature name, without any quotes,
* or empty if it is not a valid query, attribute or constant feature name
*/
public static Optional<String> argumentOf(String feature) {
Optional<Reference> reference = Reference.simple(feature);
if ( ! reference.isPresent()) return Optional.empty();
if ( ! ( reference.get().name().equals("attribute") ||
reference.get().name().equals("constant") ||
reference.get().name().equals("query")))
return Optional.empty();
return Optional.of(reference.get().arguments().expressions().get(0).toString());
}
private static String quoteIfNecessary(String s) {
if (identifierRegexp.matcher(s).matches())
return s;
else
return "\"" + s + "\"";
}
}
|