Repository: camel
Updated Branches:
  refs/heads/master 4df209449 -> 95163ca14


CAMEL-8288 Attach Lucene Documents to the Results(Hits) if header contains 
RETURN_LUCENE_DOCS=true


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/466b77d4
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/466b77d4
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/466b77d4

Branch: refs/heads/master
Commit: 466b77d4a5bc2a69a4cb50ecdd21c98c6aa677b9
Parents: 4df2094
Author: Kranti Parisa <[email protected]>
Authored: Tue Jan 27 16:22:27 2015 -0800
Committer: Claus Ibsen <[email protected]>
Committed: Fri Feb 6 07:31:04 2015 +0100

----------------------------------------------------------------------
 .../component/lucene/LuceneQueryProducer.java   |  5 +-
 .../camel/component/lucene/LuceneSearcher.java  |  7 ++-
 .../processor/lucene/LuceneQueryProcessor.java  |  5 +-
 .../camel/processor/lucene/support/Hit.java     | 10 +++
 .../lucene/LuceneIndexAndQueryProducerTest.java | 65 +++++++++++++++++++-
 5 files changed, 87 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/466b77d4/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneQueryProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneQueryProducer.java
 
b/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneQueryProducer.java
index 55bfd2d..9ca5e53 100644
--- 
a/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneQueryProducer.java
+++ 
b/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneQueryProducer.java
@@ -53,9 +53,12 @@ public class LuceneQueryProducer extends DefaultProducer {
         Hits hits;
         
         String phrase = exchange.getIn().getHeader("QUERY", String.class);
+        String returnLuceneDocs = 
exchange.getIn().getHeader("RETURN_LUCENE_DOCS", String.class);
+        boolean isReturnLuceneDocs = (returnLuceneDocs != null && 
returnLuceneDocs.equalsIgnoreCase("true")) ? true : false;
+
         if (phrase != null) {
             searcher.open(indexDirectory, analyzer);
-            hits = searcher.search(phrase, maxNumberOfHits, 
config.getLuceneVersion());            
+            hits = searcher.search(phrase, maxNumberOfHits, 
config.getLuceneVersion(), isReturnLuceneDocs);
         } else {
             throw new IllegalArgumentException("SearchPhrase for 
LucenePhraseQuerySearcher not set. Set the Header value: QUERY");
         }            

http://git-wip-us.apache.org/repos/asf/camel/blob/466b77d4/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneSearcher.java
----------------------------------------------------------------------
diff --git 
a/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneSearcher.java
 
b/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneSearcher.java
index 0d249be..7a0794a 100644
--- 
a/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneSearcher.java
+++ 
b/components/camel-lucene/src/main/java/org/apache/camel/component/lucene/LuceneSearcher.java
@@ -59,10 +59,10 @@ public class LuceneSearcher {
     }
     
     public Hits search(String searchPhrase, int maxNumberOfHits) throws 
Exception {
-        return search(searchPhrase, maxNumberOfHits, Version.LUCENE_4_10_2);
+        return search(searchPhrase, maxNumberOfHits, Version.LUCENE_4_10_2, 
false);
     }
 
-    public Hits search(String searchPhrase, int maxNumberOfHits, Version 
luceneVersion) throws Exception {
+    public Hits search(String searchPhrase, int maxNumberOfHits, Version 
luceneVersion, boolean returnLuceneDocs) throws Exception {
         Hits searchHits = new Hits();
 
         int numberOfHits = doSearch(searchPhrase, maxNumberOfHits, 
luceneVersion);
@@ -71,6 +71,9 @@ public class LuceneSearcher {
         for (ScoreDoc hit : hits) {
             Document selectedDocument = indexSearcher.doc(hit.doc);
             Hit aHit = new Hit();
+            if(returnLuceneDocs) {
+                aHit.setDocument(selectedDocument);
+            }
             aHit.setHitLocation(hit.doc);
             aHit.setScore(hit.score);
             aHit.setData(selectedDocument.get("contents"));

http://git-wip-us.apache.org/repos/asf/camel/blob/466b77d4/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/LuceneQueryProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/LuceneQueryProcessor.java
 
b/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/LuceneQueryProcessor.java
index 3fa1084..59dda56 100644
--- 
a/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/LuceneQueryProcessor.java
+++ 
b/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/LuceneQueryProcessor.java
@@ -46,10 +46,13 @@ public class LuceneQueryProcessor implements Processor {
         Hits hits;
 
         String phrase = exchange.getIn().getHeader("QUERY", String.class);
+        String returnLuceneDocs = 
exchange.getIn().getHeader("RETURN_LUCENE_DOCS", String.class);
+        boolean isReturnLuceneDocs = (returnLuceneDocs != null && 
returnLuceneDocs.equalsIgnoreCase("true")) ? true : false;
+
         if (phrase != null) {
             searcher = new LuceneSearcher();
             searcher.open(indexDirectory, analyzer);
-            hits = searcher.search(phrase, maxNumberOfHits, luceneVersion);    
        
+            hits = searcher.search(phrase, maxNumberOfHits, luceneVersion, 
isReturnLuceneDocs);
         } else {
             throw new IllegalArgumentException("SearchPhrase for 
LuceneQueryProcessor not set. Set the Header value: QUERY");
         }            

http://git-wip-us.apache.org/repos/asf/camel/blob/466b77d4/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/support/Hit.java
----------------------------------------------------------------------
diff --git 
a/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/support/Hit.java
 
b/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/support/Hit.java
index 3b7a277..78a94bd 100644
--- 
a/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/support/Hit.java
+++ 
b/components/camel-lucene/src/main/java/org/apache/camel/processor/lucene/support/Hit.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.processor.lucene.support;
 
+import org.apache.lucene.document.Document;
 import java.io.Serializable;
 
 public class Hit implements Serializable {
@@ -24,6 +25,7 @@ public class Hit implements Serializable {
     private int hitLocation;
     private float score;
     private String data;
+    private Document document;
 
     public int getHitLocation() {
         return hitLocation;
@@ -49,6 +51,14 @@ public class Hit implements Serializable {
         this.data = value;
     }
 
+    public Document getDocument() {
+        return document;
+    }
+
+    public void setDocument(Document document) {
+        this.document = document;
+    }
+
     @Override
     public String toString() {
         return "Hit[location=" + hitLocation + ", score=" + score + ", data=" 
+ data + "]";

http://git-wip-us.apache.org/repos/asf/camel/blob/466b77d4/components/camel-lucene/src/test/java/org/apache/camel/component/lucene/LuceneIndexAndQueryProducerTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-lucene/src/test/java/org/apache/camel/component/lucene/LuceneIndexAndQueryProducerTest.java
 
b/components/camel-lucene/src/test/java/org/apache/camel/component/lucene/LuceneIndexAndQueryProducerTest.java
index 665c762..033f628 100644
--- 
a/components/camel-lucene/src/test/java/org/apache/camel/component/lucene/LuceneIndexAndQueryProducerTest.java
+++ 
b/components/camel-lucene/src/test/java/org/apache/camel/component/lucene/LuceneIndexAndQueryProducerTest.java
@@ -18,6 +18,8 @@
 package org.apache.camel.component.lucene;
 
 import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -193,5 +195,66 @@ public class LuceneIndexAndQueryProducerTest extends 
CamelTestSupport {
         mockSearchEndpoint.assertIsSatisfied();
         LOG.debug("------------Completed LuceneQueryProducer Wildcard 
Test---------------");
         context.stop();
-    } 
+    }
+
+    @Test
+    public void testReturnLuceneDocsQueryProducer() throws Exception {
+        MockEndpoint mockSearchEndpoint = getMockEndpoint("mock:searchResult");
+        context.stop();
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+
+                from("direct:start").
+                        setHeader("QUERY", constant("Grouc?? Marx")).
+                        setHeader("RETURN_LUCENE_DOCS", constant("true")).
+                        
to("lucene:searchIndex:query?analyzer=#stdAnalyzer&indexDir=#std&maxHits=20").
+                        to("direct:next");
+
+                from("direct:next").process(new Processor() {
+                    public void process(Exchange exchange) throws Exception {
+                        Hits hits = exchange.getIn().getBody(Hits.class);
+                        try {
+                            printResults(hits);
+                        } catch (Exception e){
+                            LOG.error(e.getMessage());
+                            exchange.getOut().setBody(null);
+                        }
+
+                    }
+
+                    private void printResults(Hits hits) throws Exception {
+                        LOG.debug("Number of hits: " + hits.getNumberOfHits());
+                        for (int i = 0; i < hits.getNumberOfHits(); i++) {
+                            LOG.debug("Hit " + i + " Index Location:" + 
hits.getHit().get(i).getHitLocation());
+                            LOG.debug("Hit " + i + " Score:" + 
hits.getHit().get(i).getScore());
+                            LOG.debug("Hit " + i + " Data:" + 
hits.getHit().get(i).getData());
+                            if (hits.getHit().get(i).getDocument() == null) {
+                                throw new Exception("Failed to return lucene 
documents");
+                            }
+                        }
+                    }
+                }).to("mock:searchResult").process(new Processor() {
+                    @Override
+                    public void process(Exchange exchange) throws Exception {
+                        Hits hits = exchange.getIn().getBody(Hits.class);
+                        if(hits == null) {
+                            HashMap<String, String> map = new HashMap<String, 
String>();
+                            map.put("NO_LUCENE_DOCS_ERROR", "NO LUCENE DOCS 
FOUND");
+                            exchange.getContext().setProperties(map);
+                        }
+                        LOG.debug("Number of hits: " + hits.getNumberOfHits());
+                    }
+                });
+            }
+        });
+        context.start();
+        LOG.debug("------------Beginning  LuceneQueryProducer Wildcard with 
Return Lucene Docs Test---------------");
+
+        sendQuery();
+        mockSearchEndpoint.assertIsSatisfied();
+        Map<String, String> errorMap = 
mockSearchEndpoint.getCamelContext().getProperties();
+        LOG.debug("------------Completed LuceneQueryProducer Wildcard with 
Return Lucene Docs Test---------------");
+        context.stop();
+        assertTrue(errorMap.get("NO_LUCENE_DOCS_ERROR") == null);
+    }
 }

Reply via email to