mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-01 08:29:09 +00:00
parent
1f5bd495ed
commit
93ad696966
@ -556,7 +556,6 @@ public class Strings {
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO (MvG): No push: hppc or jcf?
|
|
||||||
final Set<String> result = new HashSet<>(count);
|
final Set<String> result = new HashSet<>(count);
|
||||||
final int len = chars.length;
|
final int len = chars.length;
|
||||||
int start = 0; // starting index in chars of the current substring.
|
int start = 0; // starting index in chars of the current substring.
|
||||||
|
@ -22,6 +22,8 @@ package org.elasticsearch.common.path;
|
|||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.elasticsearch.common.collect.MapBuilder.newMapBuilder;
|
import static org.elasticsearch.common.collect.MapBuilder.newMapBuilder;
|
||||||
@ -195,7 +197,7 @@ public class PathTrie<T> {
|
|||||||
|
|
||||||
private void put(Map<String, String> params, TrieNode<T> node, String value) {
|
private void put(Map<String, String> params, TrieNode<T> node, String value) {
|
||||||
if (params != null && node.isNamedWildcard()) {
|
if (params != null && node.isNamedWildcard()) {
|
||||||
params.put(node.namedWildcard(), decoder.decode(value));
|
params.put(node.namedWildcard(), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -222,7 +224,7 @@ public class PathTrie<T> {
|
|||||||
if (path.length() == 0) {
|
if (path.length() == 0) {
|
||||||
return rootValue;
|
return rootValue;
|
||||||
}
|
}
|
||||||
String[] strings = Strings.splitStringToArray(path, separator);
|
String[] strings = splitPath(decoder.decode(path));
|
||||||
if (strings.length == 0) {
|
if (strings.length == 0) {
|
||||||
return rootValue;
|
return rootValue;
|
||||||
}
|
}
|
||||||
@ -233,4 +235,50 @@ public class PathTrie<T> {
|
|||||||
}
|
}
|
||||||
return root.retrieve(strings, index, params);
|
return root.retrieve(strings, index, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Splits up the url path up by '/' and is aware of
|
||||||
|
index name expressions that appear between '<' and '>'.
|
||||||
|
*/
|
||||||
|
String[] splitPath(final String path) {
|
||||||
|
if (path == null || path.length() == 0) {
|
||||||
|
return Strings.EMPTY_ARRAY;
|
||||||
|
}
|
||||||
|
int count = 1;
|
||||||
|
boolean splitAllowed = true;
|
||||||
|
for (int i = 0; i < path.length(); i++) {
|
||||||
|
final char currentC = path.charAt(i);
|
||||||
|
if ('<' == currentC) {
|
||||||
|
splitAllowed = false;
|
||||||
|
} else if (currentC == '>') {
|
||||||
|
splitAllowed = true;
|
||||||
|
} else if (splitAllowed && currentC == separator) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final List<String> result = new ArrayList<>(count);
|
||||||
|
final StringBuilder builder = new StringBuilder();
|
||||||
|
|
||||||
|
splitAllowed = true;
|
||||||
|
for (int i = 0; i < path.length(); i++) {
|
||||||
|
final char currentC = path.charAt(i);
|
||||||
|
if ('<' == currentC) {
|
||||||
|
splitAllowed = false;
|
||||||
|
} else if (currentC == '>') {
|
||||||
|
splitAllowed = true;
|
||||||
|
} else if (splitAllowed && currentC == separator) {
|
||||||
|
if (builder.length() > 0) {
|
||||||
|
result.add(builder.toString());
|
||||||
|
builder.setLength(0);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
builder.append(currentC);
|
||||||
|
}
|
||||||
|
if (builder.length() > 0) {
|
||||||
|
result.add(builder.toString());
|
||||||
|
}
|
||||||
|
return result.toArray(new String[result.size()]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ import org.junit.Test;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.arrayContaining;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import static org.hamcrest.Matchers.nullValue;
|
import static org.hamcrest.Matchers.nullValue;
|
||||||
|
|
||||||
@ -33,7 +34,6 @@ import static org.hamcrest.Matchers.nullValue;
|
|||||||
*/
|
*/
|
||||||
public class PathTrieTests extends ESTestCase {
|
public class PathTrieTests extends ESTestCase {
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testPath() {
|
public void testPath() {
|
||||||
PathTrie<String> trie = new PathTrie<>();
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
trie.insert("/a/b/c", "walla");
|
trie.insert("/a/b/c", "walla");
|
||||||
@ -61,14 +61,12 @@ public class PathTrieTests extends ESTestCase {
|
|||||||
assertThat(params.get("docId"), equalTo("12"));
|
assertThat(params.get("docId"), equalTo("12"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testEmptyPath() {
|
public void testEmptyPath() {
|
||||||
PathTrie<String> trie = new PathTrie<>();
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
trie.insert("/", "walla");
|
trie.insert("/", "walla");
|
||||||
assertThat(trie.retrieve(""), equalTo("walla"));
|
assertThat(trie.retrieve(""), equalTo("walla"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDifferentNamesOnDifferentPath() {
|
public void testDifferentNamesOnDifferentPath() {
|
||||||
PathTrie<String> trie = new PathTrie<>();
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
trie.insert("/a/{type}", "test1");
|
trie.insert("/a/{type}", "test1");
|
||||||
@ -83,7 +81,6 @@ public class PathTrieTests extends ESTestCase {
|
|||||||
assertThat(params.get("name"), equalTo("testX"));
|
assertThat(params.get("name"), equalTo("testX"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSameNameOnDifferentPath() {
|
public void testSameNameOnDifferentPath() {
|
||||||
PathTrie<String> trie = new PathTrie<>();
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
trie.insert("/a/c/{name}", "test1");
|
trie.insert("/a/c/{name}", "test1");
|
||||||
@ -98,7 +95,6 @@ public class PathTrieTests extends ESTestCase {
|
|||||||
assertThat(params.get("name"), equalTo("testX"));
|
assertThat(params.get("name"), equalTo("testX"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testPreferNonWildcardExecution() {
|
public void testPreferNonWildcardExecution() {
|
||||||
PathTrie<String> trie = new PathTrie<>();
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
trie.insert("{test}", "test1");
|
trie.insert("{test}", "test1");
|
||||||
@ -115,7 +111,6 @@ public class PathTrieTests extends ESTestCase {
|
|||||||
assertThat(trie.retrieve("/v/x/c", params), equalTo("test6"));
|
assertThat(trie.retrieve("/v/x/c", params), equalTo("test6"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSamePathConcreteResolution() {
|
public void testSamePathConcreteResolution() {
|
||||||
PathTrie<String> trie = new PathTrie<>();
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
trie.insert("{x}/{y}/{z}", "test1");
|
trie.insert("{x}/{y}/{z}", "test1");
|
||||||
@ -132,7 +127,6 @@ public class PathTrieTests extends ESTestCase {
|
|||||||
assertThat(params.get("k"), equalTo("c"));
|
assertThat(params.get("k"), equalTo("c"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testNamedWildcardAndLookupWithWildcard() {
|
public void testNamedWildcardAndLookupWithWildcard() {
|
||||||
PathTrie<String> trie = new PathTrie<>();
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
trie.insert("x/{test}", "test1");
|
trie.insert("x/{test}", "test1");
|
||||||
@ -161,4 +155,25 @@ public class PathTrieTests extends ESTestCase {
|
|||||||
assertThat(trie.retrieve("a/*/_endpoint", params), equalTo("test5"));
|
assertThat(trie.retrieve("a/*/_endpoint", params), equalTo("test5"));
|
||||||
assertThat(params.get("test"), equalTo("*"));
|
assertThat(params.get("test"), equalTo("*"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testSplitPath() {
|
||||||
|
PathTrie<String> trie = new PathTrie<>();
|
||||||
|
assertThat(trie.splitPath("/a/"), arrayContaining("a"));
|
||||||
|
assertThat(trie.splitPath("/a/b"),arrayContaining("a", "b"));
|
||||||
|
assertThat(trie.splitPath("/a/b/c"), arrayContaining("a", "b", "c"));
|
||||||
|
assertThat(trie.splitPath("/a/b/<c/d>"), arrayContaining("a", "b", "<c/d>"));
|
||||||
|
assertThat(trie.splitPath("/a/b/<c/d>/d"), arrayContaining("a", "b", "<c/d>", "d"));
|
||||||
|
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now}>/_search"), arrayContaining("<logstash-{now}>", "_search"));
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/d}>/_search"), arrayContaining("<logstash-{now/d}>", "_search"));
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/M{YYYY.MM}}>/_search"), arrayContaining("<logstash-{now/M{YYYY.MM}}>", "_search"));
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/M{YYYY.MM}}>/_search"), arrayContaining("<logstash-{now/M{YYYY.MM}}>", "_search"));
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/M{YYYY.MM|UTC}}>/log/_search"), arrayContaining("<logstash-{now/M{YYYY.MM|UTC}}>", "log", "_search"));
|
||||||
|
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/M}>,<logstash-{now/M-1M}>/_search"), arrayContaining("<logstash-{now/M}>,<logstash-{now/M-1M}>", "_search"));
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/M}>,<logstash-{now/M-1M}>/_search"), arrayContaining("<logstash-{now/M}>,<logstash-{now/M-1M}>", "_search"));
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/M{YYYY.MM}}>,<logstash-{now/M-1M{YYYY.MM}}>/_search"), arrayContaining("<logstash-{now/M{YYYY.MM}}>,<logstash-{now/M-1M{YYYY.MM}}>", "_search"));
|
||||||
|
assertThat(trie.splitPath("/<logstash-{now/M{YYYY.MM|UTC}}>,<logstash-{now/M-1M{YYYY.MM|UTC}}>/_search"), arrayContaining("<logstash-{now/M{YYYY.MM|UTC}}>,<logstash-{now/M-1M{YYYY.MM|UTC}}>", "_search"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
"Missing index with catch":
|
||||||
|
|
||||||
|
- do:
|
||||||
|
catch: /index=logstash-\d{4}\.\d{2}\.\d{2}/
|
||||||
|
search:
|
||||||
|
index: <logstash-{now/M}>
|
Loading…
x
Reference in New Issue
Block a user