[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xindice-dev
Subject:    svn commit: r566891 - in /xml/xindice/trunk/java:
From:       natalia () apache ! org
Date:       2007-08-17 0:35:15
Message-ID: 20070817003516.34FA91A981D () eris ! apache ! org
[Download RAW message or body]

Author: natalia
Date: Thu Aug 16 17:35:14 2007
New Revision: 566891

URL: http://svn.apache.org/viewvc?view=rev&rev=566891
Log:
New service for executing text searches

Added:
    xml/xindice/trunk/java/src/org/apache/xindice/client/TextQueryService.java   \
(with props)  xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/TextQueryServiceImpl.java \
(with props)  xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/TextQueryTest.java \
(with props) Modified:
    xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java
    xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java


Added: xml/xindice/trunk/java/src/org/apache/xindice/client/TextQueryService.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/TextQueryService.java?view=auto&rev=566891
 ==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/client/TextQueryService.java \
                (added)
+++ xml/xindice/trunk/java/src/org/apache/xindice/client/TextQueryService.java Thu \
Aug 16 17:35:14 2007 @@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.client;
+
+import org.xmldb.api.base.Service;
+import org.xmldb.api.base.ResourceSet;
+import org.xmldb.api.base.XMLDBException;
+
+/**
+ * TextQueryService allows using full text search against a collection. The
+ * context collection must have LuceneIndexer in order to execute a search.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface TextQueryService extends Service {
+    ResourceSet query(String string) throws XMLDBException;
+    ResourceSet queryResource(String string, String string1) throws XMLDBException;
+}

Propchange: xml/xindice/trunk/java/src/org/apache/xindice/client/TextQueryService.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/src/org/apache/xindice/client/TextQueryService.java
                
------------------------------------------------------------------------------
    svn:keywords = Id Revision Author Date

Modified: xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java
                
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java?view=diff&rev=566891&r1=566890&r2=566891
 ==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java \
                (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java \
Thu Aug 16 17:35:14 2007 @@ -23,6 +23,7 @@
 import org.apache.xindice.client.xmldb.resources.BinaryResourceImpl;
 import org.apache.xindice.client.xmldb.services.CollectionManagementServiceImpl;
 import org.apache.xindice.client.xmldb.services.MetaService;
+import org.apache.xindice.client.xmldb.services.TextQueryServiceImpl;
 import org.apache.xindice.client.xmldb.services.XPathQueryServiceImpl;
 import org.apache.xindice.client.xmldb.services.XUpdateQueryServiceImpl;
 import org.apache.xindice.core.FaultCodes;
@@ -81,22 +82,21 @@
 
         // Register all services supported by this collection implementation.
         final XPathQueryServiceImpl xpath = new XPathQueryServiceImpl();
-        xpath.setCollection(this);
         // xpath.setSymbolDeserializer(syms);
         registerService(xpath);
 
         final XUpdateQueryServiceImpl xupdate = new XUpdateQueryServiceImpl();
-        xupdate.setCollection(this);
         registerService(xupdate);
 
+        final TextQueryServiceImpl text = new TextQueryServiceImpl();
+        registerService(text);
+
         // TODO  if (this.col.isMetaEnabled()) {
         final MetaService meta = new MetaService();
-        meta.setCollection(this);
         registerService(meta);
 
         try {
             final CollectionManagementServiceImpl manager = new \
                CollectionManagementServiceImpl();
-            manager.setCollection(this);
             registerService(manager);
 
             // CollectionManagementServiceImpl provides both standard access as a
@@ -152,9 +152,7 @@
     public org.xmldb.api.base.Service getService(String name, String version) throws \
XMLDBException {  checkOpen();
 
-        Service result = (Service) services.get(name + version);
-
-        return result;
+        return (Service) services.get(name + version);
     }
 
     /**

Added: xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/TextQueryServiceImpl.java
                
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/TextQueryServiceImpl.java?view=auto&rev=566891
 ==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/TextQueryServiceImpl.java \
                (added)
+++ xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/TextQueryServiceImpl.java \
Thu Aug 16 17:35:14 2007 @@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.client.xmldb.services;
+
+import org.apache.xindice.client.TextQueryService;
+
+/**
+ * XML:DB TextQueryService implementation that uses XML-RPC communication
+ * with server
+ *
+ * @version $Revision$, $Date$
+ */
+public class TextQueryServiceImpl extends QueryService implements TextQueryService {
+
+    /**
+     * Creates new TextQueryService
+     */
+    public TextQueryServiceImpl() {
+        super();
+        queryLang = "Text";
+    }
+}

Propchange: xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/TextQueryServiceImpl.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/TextQueryServiceImpl.java
                
------------------------------------------------------------------------------
    svn:keywords = Id Revision Author Date

Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java
                
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java?view=diff&rev=566891&r1=566890&r2=566891
 ==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java \
                (original)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java \
Thu Aug 16 17:35:14 2007 @@ -27,6 +27,7 @@
 import org.apache.xindice.integration.client.services.MetaTest;
 import org.apache.xindice.integration.client.services.XPathQueryTest;
 import org.apache.xindice.integration.client.services.XUpdateQueryTest;
+import org.apache.xindice.integration.client.services.TextQueryTest;
 
 import junit.framework.TestSuite;
 
@@ -43,6 +44,7 @@
         suite.addTestSuite(DocumentTest.class);
         suite.addTestSuite(XUpdateQueryTest.class);
         suite.addTestSuite(XPathQueryTest.class);
+        suite.addTestSuite(TextQueryTest.class);
         suite.addTestSuite(MetaTest.class);
         suite.addTestSuite(IndexedSearchTest.class);
         suite.addTestSuite(BinaryResourceTest.class);

Added: xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/TextQueryTest.java
                
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/TextQueryTest.java?view=auto&rev=566891
 ==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/TextQueryTest.java \
                (added)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/TextQueryTest.java \
Thu Aug 16 17:35:14 2007 @@ -0,0 +1,290 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.integration.client.services;
+
+import org.apache.xindice.integration.client.AbstractXmlDbClientTest;
+import org.apache.xindice.client.TextQueryService;
+import org.apache.xindice.xml.TextWriter;
+import org.xmldb.api.base.Collection;
+import org.xmldb.api.base.ResourceSet;
+import org.xmldb.api.modules.XMLResource;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.w3c.dom.Node;
+
+import java.util.HashSet;
+
+/**
+ * Tests for TextService
+ * @version $Revision$, $Date$
+ */
+public class TextQueryTest extends AbstractXmlDbClientTest {
+
+    private TextQueryService textService;
+
+    public void setUp() throws Exception {
+        super.setUp();
+
+        Collection col = client.getCollection(TEST_COLLECTION_PATH);
+        textService = (TextQueryService) col.getService("TextQueryService", "1.0");
+
+        String doc1 =
+                "<?xml version='1.0'?>" +
+                "<section>\n" +
+                "   <title>What Is Xindice</title>\n" +
+                "   <p>\n" +
+                "      The Xindice Core server is a database server designed from \
the\n" + +                "      ground up to store XML data. The\n" +
+                "      Xindice server is what is termed by\n" +
+                "      the\n" +
+                "      <link href=\"http://xmldb-org.sourceforge.net/\">XML:DB \
Initiative</link>\n" + +                "      as a Native XML Database. You could \
also refer to it as a\n" + +                "      seamless XML database which might \
be an easier to understand\n" + +                "      description.\n" +
+                "   </p>\n" +
+                "   <p>\n" +
+                "      What this means is that to the largest extent possible you \
work\n" + +                "      with XML tools and technologies when working with \
the data in the\n" + +                "      server. All data that goes into and out \
of the server is XML. The\n" + +                "      query language used is XPath \
and the programming APIs support DOM\n" + +                "      and SAX. All things \
that should be familiar to a developer used\n" + +                "      to using XML \
in their applications. When working with XML data and\n" + +                "      \
Xindice there is no mapping between different data models. You simply\n" + +          \
"      design your data as XML and store it as XML.\n" + +                "   </p>\n" \
+ +                "</section>";
+        String doc2 =
+                "<?xml version='1.0'?>" +
+                "<section>\n" +
+                "   <title>Current Status</title>\n" +
+                "   <p>\n" +
+                "      Native XML database technology is a very new area and Xindice \
is very\n" + +                "      much a project still in development.\n" +
+                "      The server currently supports storing well formed XML \
documents.\n" + +                "      This means it does not have any schema that \
constrains what\n" + +                "      can be placed into a document \
collection. This makes Xindice a\n" + +                "      semi-structured \
database and provides tremendous\n" + +                "      flexiblity in how you \
store your data, but, also means you give up\n" + +                "      some common \
database functionality such as data\n" + +                "      types.\n" +
+                "      In its current state Xindice is already a powerful tool for \
managing\n" + +                "      XML data. However, there is still much that \
needs to be done.\n" + +                "      Feedback and contributions are \
actively encouraged.\n" + +                "   </p>\n" +
+                "</section>";
+        String doc3 =
+                "<?xml version='1.0'?>" +
+                "<section>\n" +
+                "   <title>Feature Summary</title>\n" +
+                "   <p>\n" +
+                "      <strong>Document Collections</strong>: Documents are stored \
in\n" + +                "      collections that can be queried as a whole. You can \
create\n" + +                "      collections that contain just documents of the \
same type or you\n" + +                "      can create a collection to store all \
your documents together.\n" + +                "      The database doesn't care.\n" +
+                "   </p>\n" +
+                "   <p>\n" +
+                "      <strong>Command Line Management Tools</strong>: To aid the \
administrator\n" + +                "      Xindice provides a full suite of command \
line driven management tools.\n" + +                "      Just about everything you \
can do through the XML:DB API can also be\n" + +                "      done from the \
command line.\n" + +                "   </p>\n" +
+                "</section>";
+        String doc4 =
+                "<?xml version='1.0'?>" +
+                "<section>\n" +
+                "   <title>Introducing the Command Line Tools</title>\n" +
+                "   <p>\n" +
+                "      The Xindice server includes a command line program named\n" +
+                "      <code>xindice</code> that allows you to manage the\n" +
+                "      data stored in the server.\n" +
+                "      A complete list of available commands and more\n" +
+                "      detail about each command can be found in the\n" +
+                "      <link href=\"guide-tools.html\">Command Line Tools Reference \
Guide</link>.\n" + +                "   </p>\n" +
+                "</section>";
+        String doc5 =
+                "<?xml version='1.0'?>" +
+                " <section>\n" +
+                "    <title>Retrieving Documents</title>\n" +
+                "    <p>\n" +
+                "       Documents can be retrieved from the database using the ID \
that\n" + +                "       they were inserted under.\n" +
+                "    </p>\n" +
+                " </section>";
+        String doc6 =
+                "<?xml version='1.0'?>" +
+                " <section>\n" +
+                "    <title>Deleting Documents</title>\n" +
+                "    <p>\n" +
+                "       The document identified by the key fx102 will be removed \
from the\n" + +                "       collection /db/data/products.\n" +
+                "    </p>\n" +
+                " </section>";
+
+        String config =
+                "<index name='text' \
class='org.apache.xindice.core.indexer.LuceneIndexer'> " + +                "<pattern \
pattern='title' alias='title'/>" + +                "<pattern pattern='p' \
alias='text'/>" + +                "</index>";
+        this.client.createIndexer(TEST_COLLECTION_PATH, config);
+        this.client.insertDocument(TEST_COLLECTION_PATH, "doc1", doc1);
+        this.client.insertDocument(TEST_COLLECTION_PATH, "doc2", doc2);
+        this.client.insertDocument(TEST_COLLECTION_PATH, "doc3", doc3);
+        this.client.insertDocument(TEST_COLLECTION_PATH, "doc4", doc4);
+        this.client.insertDocument(TEST_COLLECTION_PATH, "doc5", doc5);
+        this.client.insertDocument(TEST_COLLECTION_PATH, "doc6", doc6);
+    }
+
+    public void tearDown() throws Exception {
+        this.client.removeDocument(TEST_COLLECTION_PATH, "doc1");
+        this.client.removeDocument(TEST_COLLECTION_PATH, "doc2");
+        this.client.removeDocument(TEST_COLLECTION_PATH, "doc3");
+        this.client.removeDocument(TEST_COLLECTION_PATH, "doc4");
+        this.client.removeDocument(TEST_COLLECTION_PATH, "doc5");
+        this.client.removeDocument(TEST_COLLECTION_PATH, "doc6");
+
+        super.tearDown();
+    }
+
+    public void testTermQuery() throws Exception {
+        String query = "text:xml";
+
+        ResourceSet resultSet = textService.query(query);
+        assertEquals(3, resultSet.getSize());
+
+        HashSet actual = new HashSet();
+        actual.add(((XMLResource) resultSet.getResource(0)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(1)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(2)).getDocumentId());
+
+        HashSet expected = new HashSet();
+        expected.add("doc1");
+        expected.add("doc2");
+        expected.add("doc3");
+        assertEquals(expected, actual);
+    }
+
+    public void testPhraseQuery() throws Exception {
+        String query = "text:\"command line\"";
+
+        ResourceSet resultSet = textService.query(query);
+        assertEquals(2, resultSet.getSize());
+
+        HashSet actual = new HashSet();
+        actual.add(((XMLResource) resultSet.getResource(0)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(1)).getDocumentId());
+
+        HashSet expected = new HashSet();
+        expected.add("doc3");
+        expected.add("doc4");
+        assertEquals(expected, actual);
+    }
+
+    public void testAndQuery() throws Exception {
+        // By default indexer uses SimpleAnalyzer that does not stem words,
+        // so query has to exact
+        String query = "title:documents AND text:removed";
+
+        ResourceSet resultSet = textService.query(query);
+        assertEquals(1, resultSet.getSize());
+
+        String key = ((XMLResource) resultSet.getResource(0)).getDocumentId();
+        assertEquals("doc6", key);
+    }
+
+    public void testOrQuery() throws Exception {
+        String query = "text:server OR text:database";
+
+        ResourceSet resultSet = textService.query(query);
+        assertEquals(5, resultSet.getSize());
+
+        HashSet actual = new HashSet();
+        actual.add(((XMLResource) resultSet.getResource(0)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(1)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(2)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(3)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(4)).getDocumentId());
+
+        HashSet expected = new HashSet();
+        expected.add("doc1");
+        expected.add("doc2");
+        expected.add("doc3");
+        expected.add("doc4");
+        expected.add("doc5");
+        assertEquals(expected, actual);
+    }
+
+    public void testWildcardQuery() throws Exception {
+        String query = "text:program*";
+
+        ResourceSet resultSet = textService.query(query);
+        assertEquals(2, resultSet.getSize());
+
+        HashSet actual = new HashSet();
+        actual.add(((XMLResource) resultSet.getResource(0)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(1)).getDocumentId());
+
+        HashSet expected = new HashSet();
+        expected.add("doc1");
+        expected.add("doc4");
+        assertEquals(expected, actual);
+    }
+
+    public void testProximityQuery() throws Exception {
+        String query = "text:\"xindice database\"~5";
+
+        ResourceSet resultSet = textService.query(query);
+        assertEquals(2, resultSet.getSize());
+
+        HashSet actual = new HashSet();
+        actual.add(((XMLResource) resultSet.getResource(0)).getDocumentId());
+        actual.add(((XMLResource) resultSet.getResource(1)).getDocumentId());
+
+        HashSet expected = new HashSet();
+        expected.add("doc1");
+        expected.add("doc2");
+        assertEquals(expected, actual);
+    }
+
+    public void testResultDoc() throws Exception {
+        String query = "title:\"deleting documents\"";
+
+        ResourceSet resultSet = textService.query(query);
+        assertEquals(1, resultSet.getSize());
+
+        XMLResource resource = (XMLResource) resultSet.getResource(0);
+
+        assertEquals("doc6", resource.getDocumentId());
+
+        Node node = resource.getContentAsDOM();
+
+        // modify the document to add source node information
+        String doc =
+                "<?xml version='1.0'?>" +
+                " <section xmlns:src='http://xml.apache.org/xindice/Query' \
src:col='/db/testing/current' src:key='doc6'>\n" + +                "    \
<title>Deleting Documents</title>\n" + +                "    <p>\n" +
+                "       The document identified by the key fx102 will be removed \
from the\n" + +                "       collection /db/data/products.\n" +
+                "    </p>\n" +
+                " </section>";
+        XMLAssert.assertXMLEqual(doc, TextWriter.toString(node));
+    }
+}

Propchange: xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/TextQueryTest.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/TextQueryTest.java
                
------------------------------------------------------------------------------
    svn:keywords = Id Revision Author Date


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic