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

List:       xindice-dev
Subject:    svn commit: r568372 - in /xml/xindice/trunk/java:
From:       natalia () apache ! org
Date:       2007-08-22 1:58:32
Message-ID: 20070822015832.5D85B1A981A () eris ! apache ! org
[Download RAW message or body]

Author: natalia
Date: Tue Aug 21 18:58:31 2007
New Revision: 568372

URL: http://svn.apache.org/viewvc?rev=568372&view=rev
Log:
Configurable default field for text indexer

Modified:
    xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java
    xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/LuceneIndexerTest.java


Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java
                
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java?rev=568372&r1=568371&r2=568372&view=diff
 ==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java \
                (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java Tue \
Aug 21 18:58:31 2007 @@ -85,6 +85,7 @@
 
     private static final String NAME     = "name";
     private static final String PATTERN  = "pattern";
+    private static final String DEFAULT  = "default";
     private static final String ANALYZER = "analyzer";
     private static final String PATTERN_STRING  = "pattern";
     private static final String PATTERN_ALIAS  = "alias";
@@ -112,6 +113,8 @@
     private int docsAdded;
     private int docsDeleted;
 
+    private String defaultField = "";
+
     private void setFile(File f) {
         idxFile = f;
     }
@@ -150,11 +153,18 @@
      * org.apache.lucene.analysis.SimpleAnalyzer by default.</ul>
      *
      * <dl><dt>pattern
-     * <dd>Child element. Its attributes:
-     * <ul><li>pattern - IndexPattern. Required. For acceptable formats, see
+     * <dd>Child element. Indexer must have at least one pattern. Its
+     * attributes:
+     * <ul><li>pattern - IndexPattern. For acceptable formats, see
      * {@link org.apache.xindice.core.indexer.Indexer#getPatterns()}
      * <li>alias - Name of the field to store/search values for that pattern.
-     * Required.</ul></dl>
+     * </dl>
+     * <dl><dt>default
+     * <dd>Child element. Optional. Its attributes:
+     * <li>alias - Indicates the pattern alias that will be used as
+     * the default field for search. If omitted, search query has to include
+     * field name for all terms, there will be no default.
+     * </ul></dl>
      * </dl>
      *
      * @param config Configuration to apply
@@ -182,6 +192,18 @@
                 this.patterns.put(new IndexPattern(collection.getSymbols(), name, \
null), alias);  }
 
+            Configuration[] defaults = config.getChildren(DEFAULT);
+            if (defaults.length > 1) {
+                throw new CannotCreateException("There may be only one default \
field"); +            } else if (defaults.length == 1) {
+                String alias = defaults[0].getAttribute(PATTERN_ALIAS);
+                if (this.patterns.values().contains(alias)) {
+                    defaultField = alias;
+                } else {
+                    throw new CannotCreateException("Alias '" + alias + "' is \
undefined in configuration"); +                }
+            }
+
             setFile(new File(collection.getCollectionRoot(), name));
         } catch (Exception e) {
             throw new XindiceException(e);
@@ -461,7 +483,7 @@
 
         String textQuery = query.getValue(0).toString();
         try {
-            return queryMatches(new QueryParser("", \
getAnalyzer()).parse(textQuery)); +            return queryMatches(new \
QueryParser(defaultField, getAnalyzer()).parse(textQuery));  } catch (ParseException \
                e) {
             throw new CompilationException("Failed to parse query '" + textQuery + \
"'", e);  }

Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/LuceneIndexerTest.java
                
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/LuceneIndexerTest.java?rev=568372&r1=568371&r2=568372&view=diff
 ==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/LuceneIndexerTest.java \
                (original)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/core/indexer/LuceneIndexerTest.java \
Tue Aug 21 18:58:31 2007 @@ -79,7 +79,7 @@
         db.close();
     }
 
-    private LuceneIndexer createIndex(String name, HashMap patterns) throws \
Exception { +    private LuceneIndexer createIndex(String name, HashMap patterns, \
String defaultField) throws Exception {  String config = "<index name='" + name + "' \
" +  "class='" + indexClass + "' " +
                         "analyzer='org.apache.lucene.analysis.SimpleAnalyzer'>";
@@ -87,6 +87,9 @@
             String alias = (String) i.next();
             config += "<pattern pattern='" + patterns.get(alias) + "' alias='" + \
alias + "' />";  }
+        if (defaultField != null) {
+            config += "<default alias='" + defaultField + "' />";
+        }
         config += "</index>";
 
         LuceneIndexer ind = (LuceneIndexer) collection.createIndexer(new \
Configuration(DOMParser.toDocument(config))); @@ -101,7 +104,7 @@
     public void testSingleIndex() throws Exception {
         HashMap patterns = new HashMap();
         patterns.put("test", "a");
-        LuceneIndexer idx = createIndex("test", patterns);
+        LuceneIndexer idx = createIndex("test", patterns, null);
 
         String query = "test:test";
         IndexMatch[] match = query(idx, query);
@@ -114,9 +117,9 @@
             HashMap patterns = new HashMap();
             patterns.put("test1", "a@*");
             patterns.put("test2", "b@*");
-            createIndex("test1", patterns);
-            createIndex("test2", patterns);
-            assertTrue("There can be only one full text index per collection", \
false); +            createIndex("test1", patterns, null);
+            createIndex("test2", patterns, null);
+            fail("There can be only one full text index per collection");
         } catch (DuplicateIndexException e) {
             // correct behavior
         }
@@ -126,27 +129,27 @@
         HashMap patterns = new HashMap();
         patterns.put("test1", "a@*");
         patterns.put("test2", "b@*");
-        LuceneIndexer idx = createIndex("test", patterns);
+        LuceneIndexer idx = createIndex("test", patterns, "test1");
 
-        IndexMatch[] match = query(idx, "test1:test");
+        IndexMatch[] match = query(idx, "test");
         assertEquals(3, match.length);
 
         match = query(idx, "test2:test");
         assertEquals(3, match.length);
 
-        match = query(idx, "test1:test AND test2:test");
+        match = query(idx, "test AND test2:test");
         assertEquals(1, match.length);
 
-        match = query(idx, "test1:test OR test2:test");
+        match = query(idx, "test OR test2:test");
         assertEquals(5, match.length);
     }
 
     public void testNestedContent() throws Exception {
         HashMap patterns = new HashMap();
         patterns.put("doc", "doc");
-        LuceneIndexer idx = createIndex("test", patterns);
+        LuceneIndexer idx = createIndex("test", patterns, "doc");
 
-        String query = "doc:foo";
+        String query = "foo";
         IndexMatch[] match = query(idx, query);
 
         assertEquals(2, match.length);


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

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