You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-dev@xml.apache.org by na...@apache.org on 2008/02/18 03:33:57 UTC
svn commit: r628599 [2/2] - in /xml/xindice/trunk/java:
src/org/apache/xindice/core/indexer/ src/org/apache/xindice/core/query/
tests/src/org/apache/xindice/core/indexer/
tests/src/org/apache/xindice/core/query/
tests/src/org/apache/xindice/integration...
Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/ValueIndexerTest.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/ValueIndexerTest.java?rev=628599&r1=628598&r2=628599&view=diff
==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/ValueIndexerTest.java (original)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/ValueIndexerTest.java Sun Feb 17 18:33:55 2008
@@ -23,7 +23,9 @@
import org.apache.xindice.core.DBException;
import org.apache.xindice.core.Database;
import org.apache.xindice.core.DatabaseTest;
+import org.apache.xindice.core.data.Value;
import org.apache.xindice.util.Configuration;
+import org.apache.xindice.util.XindiceException;
import org.apache.xindice.xml.dom.DOMParser;
import junit.framework.TestCase;
@@ -78,6 +80,11 @@
return ind.queryMatches(query);
}
+ private IndexMatch[] query(Indexer ind, String pattern, Value[] values, int op) throws DBException {
+ IndexPattern indPattern = new IndexPattern(collection.getSymbols(), pattern, null);
+ IndexQuery query = new IndexQuery(indPattern, op, values);
+ return ind.queryMatches(query);
+ }
public void testStringIndex() throws Exception {
Indexer ind = createIndex("StrIndex", "test@value", "string");
@@ -98,6 +105,25 @@
assertEquals(2, match.length);
}
+ public void testWildcardIndex() throws Exception {
+ Indexer ind = createIndex("StrIndex", "*@value", "string");
+
+ Document document = DOMParser.toDocument("<test1 value='abc'/>");
+ collection.insertDocument("key1", document);
+
+ document = DOMParser.toDocument("<test value='abe'/>");
+ collection.insertDocument("key2", document);
+
+ document = DOMParser.toDocument("<test1 value='bcd'/>");
+ collection.insertDocument("key3", document);
+
+ document = DOMParser.toDocument("<test value='aac'/>");
+ collection.insertDocument("key", document);
+
+ IndexMatch[] match = query(ind, "test@value", "ab", IndexQuery.SW);
+ assertEquals(1, match.length);
+ }
+
public void testElementEmptyStringIndex() throws Exception {
Indexer ind = createIndex("StrIndex", "test", "string");
@@ -183,7 +209,7 @@
IndexMatch[] match = query(ind, "test@value", "71.48941", IndexQuery.LT);
assertEquals(6, match.length);
- match = query(ind, "test@pattern", "-211.499539", IndexQuery.LT);
+ match = query(ind, "test@value", "-211.499539", IndexQuery.LT);
assertEquals(2, match.length);
}
@@ -255,5 +281,178 @@
match = query(ind, "test@value", "2", IndexQuery.EQ);
assertEquals("Did not find new XML document in the index: ", 1, match.length);
+ }
+
+ public void testStringAbsolutePathIndex() throws Exception {
+ Indexer ind = createIndex("StrIndex", "/doc/test@value", "string");
+
+ Document document = DOMParser.toDocument("<doc><test value='abc'/></doc>");
+ collection.insertDocument("key1", document);
+
+ document = DOMParser.toDocument("<doc><test value='abe'/></doc>");
+ collection.insertDocument("key2", document);
+
+ document = DOMParser.toDocument("<doc><test value='bcd'/></doc>");
+ collection.insertDocument("key3", document);
+
+ document = DOMParser.toDocument("<doc><test value='aac'/></doc>");
+ collection.insertDocument("key", document);
+
+ IndexMatch[] match = query(ind, "/doc/test@value", "ab", IndexQuery.SW);
+ assertEquals(2, match.length);
+ }
+
+ public void testStringRelativePathIndex() throws Exception {
+ Indexer ind = createIndex("StrIndex", "test@value", "string");
+
+ Document document = DOMParser.toDocument("<doc1><test value='abc'/></doc1>");
+ collection.insertDocument("key1", document);
+
+ document = DOMParser.toDocument("<doc><test value='abe'/></doc>");
+ collection.insertDocument("key2", document);
+
+ document = DOMParser.toDocument("<doc1><test value='bcd'/></doc1>");
+ collection.insertDocument("key3", document);
+
+ document = DOMParser.toDocument("<doc><test value='aac'/></doc>");
+ collection.insertDocument("key", document);
+
+ // index pattern is more general and therefore will return keys that not necesserily match the query
+ IndexMatch[] match = query(ind, "/doc/test@value", "ab", IndexQuery.SW);
+ assertEquals(2, match.length);
+ }
+
+ public void testQueryEQ() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", "8", IndexQuery.EQ);
+ assertEquals(1, match.length);
+
+ match = query(ind, "test@value", "9", IndexQuery.EQ);
+ assertEquals(2, match.length);
+ }
+
+ public void testQueryNEQ() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", "8", IndexQuery.NEQ);
+ assertEquals(4, match.length);
+
+ match = query(ind, "test@value", "9", IndexQuery.NEQ);
+ assertEquals(3, match.length);
+ }
+
+ public void testQueryGT() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", "8", IndexQuery.GT);
+ assertEquals(3, match.length);
+
+ match = query(ind, "test@value", "9", IndexQuery.GT);
+ assertEquals(1, match.length);
+ }
+
+ public void testQueryGEQ() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", "10", IndexQuery.GEQ);
+ assertEquals(1, match.length);
+
+ match = query(ind, "test@value", "9", IndexQuery.GEQ);
+ assertEquals(3, match.length);
+ }
+
+ public void testQueryLT() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", "7", IndexQuery.LT);
+ assertEquals(0, match.length);
+
+ match = query(ind, "test@value", "9", IndexQuery.LT);
+ assertEquals(2, match.length);
+ }
+
+ public void testQueryLEQ() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", "7", IndexQuery.LEQ);
+ assertEquals(1, match.length);
+
+ match = query(ind, "test@value", "9", IndexQuery.LEQ);
+ assertEquals(4, match.length);
+ }
+
+ public void testQueryIN() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", new Value[] {new Value("7"), new Value("9")}, IndexQuery.IN);
+ assertEquals(3, match.length);
+ }
+
+ public void testQueryBW() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", new Value[] {new Value("8"), new Value("10")}, IndexQuery.BW);
+ assertEquals(4, match.length);
+
+ match = query(ind, "test@value", new Value[] {new Value("8"), new Value("9")}, IndexQuery.BW);
+ assertEquals(3, match.length);
+ }
+
+ public void testQueryBWX() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", new Value[] {new Value("8"), new Value("10")}, IndexQuery.BWX);
+ assertEquals(2, match.length);
+ }
+
+ public void testQueryNBW() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", new Value[] {new Value("8"), new Value("10")}, IndexQuery.NBW);
+ assertEquals(3, match.length);
+ }
+
+ public void testQueryNBWX() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", new Value[] {new Value("8"), new Value("9")}, IndexQuery.NBWX);
+ assertEquals(2, match.length);
+ }
+
+ public void testQueryNIN() throws Exception {
+ Indexer ind = createIndex("Index", "test@value", "long");
+ fillQueryData();
+
+ IndexMatch[] match = query(ind, "test@value", new Value[] {new Value("7"), new Value("9")}, IndexQuery.NIN);
+ assertEquals(2, match.length);
+ }
+
+ private void fillQueryData() throws XindiceException {
+ Document document = DOMParser.toDocument("<test value='10'/>");
+ collection.insertDocument("key1", document);
+
+ document = DOMParser.toDocument("<test value='9'/>");
+ collection.insertDocument("key2", document);
+
+ document = DOMParser.toDocument("<test value='8'/>");
+ collection.insertDocument("key3", document);
+
+ document = DOMParser.toDocument("<test value='9'/>");
+ collection.insertDocument("key4", document);
+
+ document = DOMParser.toDocument("<test value='7'/>");
+ collection.insertDocument("key5", document);
}
}
Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/core/query/TextQueryResolverTest.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/core/query/TextQueryResolverTest.java?rev=628599&r1=628598&r2=628599&view=diff
==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/core/query/TextQueryResolverTest.java (original)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/core/query/TextQueryResolverTest.java Sun Feb 17 18:33:55 2008
@@ -79,8 +79,8 @@
collection.insertDocument("key5", document);
HashMap patterns = new HashMap();
- patterns.put("test1", "a@*");
- patterns.put("test2", "b@*");
+ patterns.put("test1", "a");
+ patterns.put("test2", "b");
idx = createIndex("test", patterns);
}
Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/IndexedSearchTest.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/IndexedSearchTest.java?rev=628599&r1=628598&r2=628599&view=diff
==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/IndexedSearchTest.java (original)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/IndexedSearchTest.java Sun Feb 17 18:33:55 2008
@@ -899,7 +899,7 @@
"//person[info[ftcontains('text')]]/last[@surname = 'yes']", // query
"SENA", // index name
"Lucene", // index type
- "info", // index pattern
+ "info", // index pattern
8, // indexed query speedup expected (conservative)
new String[] { // test docs specifically for this test
"<?xml version='1.0'?>" +
@@ -935,4 +935,39 @@
aTest.runTest();
}
+
+ /**
+ * Tests a starts-with search query for an attribute value that should be resolvable using indexed searching
+ * on a value index with a more complex index pattern.
+ */
+ public void testAbsoluteIndexPatternStartsWithSearch() throws Exception {
+ // search all records whose last name begins with 'Smi'
+ IndexerTestDefinition aTest = new IndexerTestDefinition(
+ "testSpecificElementSpecificAttributeValueIndexedStartsWithSearch", // description
+ "/person/phone[starts-with(@call, 'n')]", // query
+ "SESA", // index name
+ "Value", // index type
+ "/person/phone@call", // index pattern
+ 6, // indexed query speedup expected (conservative)
+ new String[] { // test docs specifically for this test
+ "<?xml version='1.0'?>" +
+ "<person number3='yes'>" +
+ "<first surname='no' given='yes'>Sally</first>" +
+ "<last surname='yes'>aSm</last>" +
+ "<phone call='no' type='work'>555-345-6789</phone>" +
+ "<address> " +
+ "<street>" +
+ "<number given='no' />" +
+ "</street>" +
+ "</address>" +
+ "</person>"
+ },
+ 1, // expected result count
+ new Object[] { // expected resources to check for (can be empty or partial set)
+ new Integer(0), "<phone call='no' type='work'>555-345-6789</phone>"
+ });
+
+ aTest.runTest();
+ }
+
}