|
Author: erwan
Date: Sun Dec 19 11:12:53 2010 New Revision: 1050811 URL: http://svn.apache.org/viewvc?rev=1050811&view=rev Log: Migrating from lucene 2.4.1 to lucene 3.0.3 Added: ofbiz/trunk/applications/content/lib/lucene-core-3.0.3.jar (with props) Removed: ofbiz/trunk/applications/content/lib/lucene-core-2.4.1.jar Modified: ofbiz/trunk/.classpath ofbiz/trunk/LICENSE ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchServices.java ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchWorker.java ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/cms/Search.groovy ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/content/Search.groovy Modified: ofbiz/trunk/.classpath URL: http://svn.apache.org/viewvc/ofbiz/trunk/.classpath?rev=1050811&r1=1050810&r2=1050811&view=diff ============================================================================== --- ofbiz/trunk/.classpath (original) +++ ofbiz/trunk/.classpath Sun Dec 19 11:12:53 2010 @@ -2,7 +2,7 @@ <classpath> <classpathentry kind="con" path="GROOVY_SUPPORT" exported="true"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="lib" path="applications/content/lib/lucene-core-2.4.1.jar"/> + <classpathentry kind="lib" path="applications/content/lib/lucene-core-3.0.3.jar"/> <classpathentry kind="lib" path="applications/content/lib/poi-3.2-FINAL-20081019.jar"/> <classpathentry kind="lib" path="framework/base/lib/ant-1.7.1.jar"/> <classpathentry kind="lib" path="framework/base/lib/ant-junit-1.7.1.jar"/> Modified: ofbiz/trunk/LICENSE URL: http://svn.apache.org/viewvc/ofbiz/trunk/LICENSE?rev=1050811&r1=1050810&r2=1050811&view=diff ============================================================================== --- ofbiz/trunk/LICENSE (original) +++ ofbiz/trunk/LICENSE Sun Dec 19 11:12:53 2010 @@ -151,7 +151,7 @@ ofbiz/trunk/framework/webslinger/lib/web ofbiz/trunk/framework/webslinger/lib/webslinger-extension-velocity-20091211-3897-7ab22baea4b6.jar ofbiz/trunk/framework/webslinger/lib/webslinger-extension-wiki-20091211-3897-7ab22baea4b6.jar ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20091211-3897-7ab22baea4b6.jar -ofbiz/trunk/applications/content/lib/lucene-core-2.4.1.jar +ofbiz/trunk/applications/content/lib/lucene-core-3.0.3.jar ofbiz/trunk/applications/content/lib/poi-3.2-FINAL-20081019.jar ofbiz/trunk/specialpurpose/googlecheckout/lib/checkout-sdk-0.8.8.jar ========================================================================= Added: ofbiz/trunk/applications/content/lib/lucene-core-3.0.3.jar URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/lib/lucene-core-3.0.3.jar?rev=1050811&view=auto ============================================================================== Binary file - no diff available. Propchange: ofbiz/trunk/applications/content/lib/lucene-core-3.0.3.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchServices.java?rev=1050811&r1=1050810&r2=1050811&view=diff ============================================================================== --- ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchServices.java (original) +++ ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchServices.java Sun Dec 19 11:12:53 2010 @@ -18,6 +18,7 @@ *******************************************************************************/ package org.ofbiz.content.search; +import java.util.Date; import java.util.List; import java.util.Map; @@ -39,11 +40,15 @@ public class SearchServices { public static final String module = SearchServices.class.getName(); public static Map<String, Object> indexTree(DispatchContext dctx, Map<String, ? extends Object> context) { + Date start = new Date(); LocalDispatcher dispatcher = dctx.getDispatcher(); Delegator delegator = dctx.getDelegator(); String siteId = (String) context.get("contentId"); String path = (String) context.get("path"); + if (path == null) { + path = SearchWorker.getIndexPath(path); + } Map<String, Object> envContext = FastMap.newInstance(); if (Debug.infoOn()) Debug.logInfo("in indexTree, siteId:" + siteId, module); @@ -58,7 +63,9 @@ public class SearchServices { Debug.logError(e, module); return ServiceUtil.returnError("Error indexing tree: " + e.toString()); } + Date end = new Date(); if (Debug.infoOn()) Debug.logInfo("in indexTree, results:" + results, module); + if (Debug.infoOn()) Debug.logInfo("Indexing done in: " + (end.getTime()-start.getTime()) + " ms", module); return results; } } Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchWorker.java?rev=1050811&r1=1050810&r2=1050811&view=diff ============================================================================== --- ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchWorker.java (original) +++ ofbiz/trunk/applications/content/src/org/ofbiz/content/search/SearchWorker.java Sun Dec 19 11:12:53 2010 @@ -18,6 +18,7 @@ *******************************************************************************/ package org.ofbiz.content.search; +import java.io.File; import java.io.FileNotFoundException; import java.util.Iterator; import java.util.List; @@ -43,6 +44,9 @@ import org.apache.lucene.document.Docume import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; +import org.apache.lucene.util.Version; @@ -99,16 +103,16 @@ public class SearchWorker { indexContentList(dispatcher, delegator, context, idList, path); } - public static void indexContentList(LocalDispatcher dispatcher, Delegator delegator, Map<String, Object> context, List<String> idList, String path) throws Exception { - String indexAllPath = getIndexPath(path); - if (Debug.infoOn()) Debug.logInfo("in indexContent, indexAllPath:" + indexAllPath, module); + public static void indexContentList(LocalDispatcher dispatcher, Delegator delegator, Map<String, Object> context,List<String> idList, String path) throws Exception { + Directory directory = FSDirectory.open(new File(getIndexPath(path))); + if (Debug.infoOn()) Debug.logInfo("in indexContent, indexAllPath: " + directory.toString(), module); GenericValue content = null; // Delete existing documents Iterator<String> iter = null; List<GenericValue> contentList = null; IndexReader reader = null; try { - reader = IndexReader.open(indexAllPath); + reader = IndexReader.open(directory, false); } catch (Exception e) { // ignore } @@ -137,9 +141,9 @@ public class SearchWorker { // Now create IndexWriter writer = null; try { - writer = new IndexWriter(indexAllPath, new StandardAnalyzer(), false, IndexWriter.MaxFieldLength.UNLIMITED); + writer = new IndexWriter(directory, new StandardAnalyzer(Version.LUCENE_30), false, IndexWriter.MaxFieldLength.UNLIMITED); } catch (Exception e) { - writer = new IndexWriter(indexAllPath, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED); + writer = new IndexWriter(directory, new StandardAnalyzer(Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED); } Iterator<GenericValue> contentListIter = contentList.iterator(); @@ -152,9 +156,8 @@ public class SearchWorker { } public static void deleteContentDocument(GenericValue content, String path) throws Exception { - String indexAllPath = null; - indexAllPath = getIndexPath(path); - IndexReader reader = IndexReader.open(indexAllPath); + Directory directory = FSDirectory.open(new File(getIndexPath(path))); + IndexReader reader = IndexReader.open(directory); deleteContentDocument(content, reader); reader.close(); } @@ -179,14 +182,14 @@ public class SearchWorker { } public static void indexContent(LocalDispatcher dispatcher, Delegator delegator, Map<String, Object> context, GenericValue content, String path) throws Exception { - String indexAllPath = getIndexPath(path); + Directory directory = FSDirectory.open(new File(getIndexPath(path))); IndexWriter writer = null; try { - writer = new IndexWriter(indexAllPath, new StandardAnalyzer(), false, IndexWriter.MaxFieldLength.UNLIMITED); - if (Debug.infoOn()) Debug.logInfo("Used old directory:" + indexAllPath, module); + writer = new IndexWriter(directory, new StandardAnalyzer(Version.LUCENE_30), false, IndexWriter.MaxFieldLength.UNLIMITED); + if (Debug.infoOn()) Debug.logInfo("Used old directory:" + directory.toString(), module); } catch (FileNotFoundException e) { - writer = new IndexWriter(indexAllPath, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED); - if (Debug.infoOn()) Debug.logInfo("Created new directory:" + indexAllPath, module); + writer = new IndexWriter(directory, new StandardAnalyzer(Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED); + if (Debug.infoOn()) Debug.logInfo("Created new directory:" + directory.toString(), module); } indexContent(dispatcher, delegator, context, content, writer); @@ -200,8 +203,7 @@ public class SearchWorker { if (doc != null) { writer.addDocument(doc); Integer goodIndexCount = (Integer)context.get("goodIndexCount"); - int newCount = goodIndexCount.intValue() + 1; - Integer newIndexCount = Integer.valueOf(newCount); + Integer newIndexCount = goodIndexCount + 1; context.put("goodIndexCount", newIndexCount); } /* @@ -218,12 +220,12 @@ public class SearchWorker { } public static void indexDataResource(Delegator delegator, Map<String, Object> context, String id, String path) throws Exception { - String indexAllPath = getIndexPath(path); + Directory directory = FSDirectory.open(new File(getIndexPath(path))); IndexWriter writer = null; try { - writer = new IndexWriter(indexAllPath, new StandardAnalyzer(), false, IndexWriter.MaxFieldLength.UNLIMITED); + writer = new IndexWriter(directory, new StandardAnalyzer(Version.LUCENE_30), false, IndexWriter.MaxFieldLength.UNLIMITED); } catch (FileNotFoundException e) { - writer = new IndexWriter(indexAllPath, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED); + writer = new IndexWriter(directory, new StandardAnalyzer(Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED); } indexDataResource(delegator, context, id, writer); writer.optimize(); Modified: ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/cms/Search.groovy URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/cms/Search.groovy?rev=1050811&r1=1050810&r2=1050811&view=diff ============================================================================== --- ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/cms/Search.groovy (original) +++ ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/cms/Search.groovy Sun Dec 19 11:12:53 2010 @@ -20,47 +20,43 @@ import org.apache.lucene.analysis.Analyzer import org.apache.lucene.analysis.standard.StandardAnalyzer import org.apache.lucene.document.Document -import org.apache.lucene.search.Searcher -import org.apache.lucene.search.IndexSearcher import org.apache.lucene.index.IndexReader -import org.apache.lucene.search.Query -import org.apache.lucene.search.TermQuery -import org.apache.lucene.search.BooleanQuery -import org.apache.lucene.search.BooleanClause; import org.apache.lucene.index.Term -import org.apache.lucene.search.Hits import org.apache.lucene.queryParser.QueryParser -import org.ofbiz.base.util.UtilHttp +import org.apache.lucene.store.FSDirectory +import org.apache.lucene.util.Version import org.ofbiz.base.util.Debug -import org.ofbiz.product.feature.ParametricSearch +import org.ofbiz.base.util.UtilHttp import org.ofbiz.content.search.SearchWorker +import org.ofbiz.product.feature.ParametricSearch +import org.apache.lucene.search.* +import org.apache.lucene.store.Directory paramMap = UtilHttp.getParameterMap(request); -queryLine = paramMap.queryLine; +queryLine = paramMap.queryLine.toString(); Debug.logInfo("in search, queryLine:" + queryLine, ""); siteId = paramMap.lcSiteId; Debug.logInfo("in search, siteId:" + siteId, ""); -searchFeature1 = paramMap.SEARCH_FEAT; -searchFeature2 = paramMap.SEARCH_FEAT2; -searchFeature3 = paramMap.SEARCH_FEAT3; +searchFeature1 = (String) paramMap.SEARCH_FEAT; +searchFeature2 = (String) paramMap.SEARCH_FEAT2; +searchFeature3 = (String) paramMap.SEARCH_FEAT3; featureIdByType = ParametricSearch.makeFeatureIdByTypeMap(paramMap); Debug.logInfo("in search, featureIdByType:" + featureIdByType, ""); - combQuery = new BooleanQuery(); -indexPath = null; +Directory directory = FSDirectory.open(new File(SearchWorker.getIndexPath(null))); +IndexReader reader = IndexReader.open(directory, true); // only searching, so read-only=true Searcher searcher = null; Analyzer analyzer = null; try { - indexPath = SearchWorker.getIndexPath(null); - Debug.logInfo("in search, indexPath:" + indexPath, ""); - searcher = new IndexSearcher(indexPath); + Debug.logInfo("in search, indexPath:" + directory.toString(), ""); + searcher = new IndexSearcher(reader); Debug.logInfo("in search, searcher:" + searcher, ""); - analyzer = new StandardAnalyzer(); + analyzer = new StandardAnalyzer(Version.LUCENE_30); } catch (java.io.FileNotFoundException e) { request.setAttribute("errorMsgReq", "No index file exists."); Debug.logError("in search, error:" + e.getMessage(), ""); @@ -70,14 +66,14 @@ try { if (queryLine || siteId) { Query query = null; if (queryLine) { - queryParser = new QueryParser("content", analyzer); - query = queryParser.parse(queryLine); + QueryParser parser = new QueryParser(Version.LUCENE_30, "content", analyzer); + query = parser.parse(queryLine); combQuery.add(query, BooleanClause.Occur.MUST); } Debug.logInfo("in search, combQuery(0):" + combQuery, ""); if (siteId) { - termQuery = new TermQuery(new Term("site", siteId)); + termQuery = new TermQuery(new Term("site", siteId.toString())); combQuery.add(termQuery, BooleanClause.Occur.MUST); Debug.logInfo("in search, termQuery:" + termQuery.toString(), ""); } @@ -109,32 +105,32 @@ if (searchFeature1 || searchFeature2 || Debug.logInfo("in search searchFeature3, termQuery:" + termQuery.toString(), ""); } - if (!featureIdByType.isEmpty()) { - values = featureIdByType.values(); - values.each { val -> - termQuery = new TermQuery(new Term("feature", val)); + if (featureIdByType) { + featureIdByType.each { key, value -> + termQuery = new TermQuery(new Term("feature", value)); featureQuery.add(termQuery, featuresRequired); Debug.logInfo("in search searchFeature3, termQuery:" + termQuery.toString(), ""); } - combQuery.add(featureQuery, featuresRequired); + combQuery.add(featureQuery, featuresRequired); } } if (searcher) { Debug.logInfo("in search searchFeature3, combQuery:" + combQuery.toString(), ""); - Hits hits = searcher.search(combQuery); - Debug.logInfo("in search, hits:" + hits.length(), ""); + TopScoreDocCollector collector = TopScoreDocCollector.create(100, false); //defaulting to 100 results + searcher.search(combQuery, collector); + ScoreDoc[] hits = collector.topDocs().scoreDocs; + Debug.logInfo("in search, hits:" + collector.getTotalHits(), ""); contentList = [] as ArrayList; hitSet = [:] as HashSet; - for (int start = 0; start < hits.length(); start++) { - doc = hits.doc(start); - contentId = doc.contentId; - content = delegator.findOne("Content", [contentId : contentId], true); - if (!hitSet.contains(contentId)) { - contentList.add(content); - hitSet.add(contentId); - } + for (int start = 0; start < collector.getTotalHits(); start++) { + Document doc = searcher.doc(hits[start].doc) + contentId = doc.get("contentId"); + content = delegator.findOne("Content", [contentId : contentId], true); + if (!hitSet.contains(contentId)) { + contentList.add(content); + hitSet.add(contentId); + } } context.queryResults = contentList; } - Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/content/Search.groovy URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/content/Search.groovy?rev=1050811&r1=1050810&r2=1050811&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/content/Search.groovy (original) +++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/content/Search.groovy Sun Dec 19 11:12:53 2010 @@ -17,24 +17,23 @@ * under the License. */ -import org.ofbiz.base.util.UtilHttp; -import org.ofbiz.base.util.UtilMisc; -import org.ofbiz.base.util.Debug; -import org.ofbiz.base.util.UtilValidate; -import org.ofbiz.base.util.StringUtil; -import org.ofbiz.content.search.SearchWorker; -import org.apache.lucene.analysis.Analyzer; -import org.apache.lucene.analysis.standard.StandardAnalyzer; -import org.apache.lucene.document.Document; -import org.apache.lucene.search.*; -import org.apache.lucene.index.IndexReader; -import org.apache.lucene.index.Term; -import org.apache.lucene.queryParser.QueryParser; -import org.ofbiz.widget.html.HtmlFormWrapper; -import org.ofbiz.product.feature.ParametricSearch; +import org.apache.lucene.analysis.Analyzer +import org.apache.lucene.analysis.standard.StandardAnalyzer +import org.apache.lucene.document.Document +import org.apache.lucene.index.IndexReader +import org.apache.lucene.index.Term +import org.apache.lucene.queryParser.QueryParser +import org.apache.lucene.store.FSDirectory +import org.apache.lucene.util.Version +import org.ofbiz.base.util.Debug +import org.ofbiz.base.util.UtilHttp +import org.ofbiz.content.search.SearchWorker +import org.ofbiz.product.feature.ParametricSearch +import org.ofbiz.widget.html.HtmlFormWrapper +import org.apache.lucene.search.* paramMap = UtilHttp.getParameterMap(request); -queryLine = paramMap.queryLine; +queryLine = paramMap.queryLine.toString(); //Debug.logInfo("in search, queryLine:" + queryLine, ""); formDefFile = page.formDefFile; @@ -53,57 +52,58 @@ featureIdByType = ParametricSearch.makeF //Debug.logInfo("in search, featureIdByType:" + featureIdByType, ""); combQuery = new BooleanQuery(); -indexPath = null; -searcher = null; -analyzer = null; +IndexReader reader = IndexReader.open(FSDirectory.open(new File(SearchWorker.getIndexPath(null))), true); // only searching, so read-only=true +Searcher searcher = null; +Analyzer analyzer = null; try { - indexPath = SearchWorker.getIndexPath(null); - searcher = new IndexSearcher(indexPath); - analyzer = new StandardAnalyzer(); + searcher = new IndexSearcher(reader); + analyzer = new StandardAnalyzer(Version.LUCENE_30); } catch (java.io.FileNotFoundException e) { Debug.logError(e, "Search.groovy"); request.setAttribute("errorMsgReq", "No index file exists."); } -termQuery = new TermQuery(new Term("site", siteId.toLowerCase())); +termQuery = new TermQuery(new Term("site", siteId.toString())); combQuery.add(termQuery, BooleanClause.Occur.MUST); //Debug.logInfo("in search, termQuery:" + termQuery.toString(), ""); //Debug.logInfo("in search, combQuery(1):" + combQuery, ""); if (queryLine && analyzer) { Query query = null; - queryParser = new QueryParser("content", analyzer); - query = queryParser.parse(queryLine); - combQuery.add(query, true, false); + QueryParser parser = new QueryParser(Version.LUCENE_30, "content", analyzer); + query = parser.parse(queryLine); + combQuery.add(query, BooleanClause.Occur.MUST); } if (featureIdByType) { featureQuery = new BooleanQuery(); - anyOrAll = paramMap.any_or_all; - featuresRequired = true; - if ("any".equals(anyOrAll)) { - featuresRequired = false; + featuresRequired = BooleanClause.Occur.MUST; + if ("any".equals(paramMap.anyOrAll)) { + featuresRequired = BooleanClause.Occur.SHOULD; } if (featureIdByType) { featureIdByType.each { key, value -> termQuery = new TermQuery(new Term("feature", value)); - featureQuery.add(termQuery, featuresRequired, false); + featureQuery.add(termQuery, featuresRequired); //Debug.logInfo("in search searchFeature3, termQuery:" + termQuery.toString(), ""); } } - combQuery.add(featureQuery, featuresRequired, false); + combQuery.add(featureQuery, featuresRequired); } if (searcher) { Debug.logInfo("in search searchFeature3, combQuery:" + combQuery.toString(), ""); - hits = searcher.search(combQuery); - Debug.logInfo("in search, hits:" + hits.length(), ""); - contentList = []; - hitSet = new HashSet(); - for (start = 0; start < hits.length(); start++) { - doc = hits.doc(start); - contentId = doc.contentId; - content = delegator.findByPrimaryKeyCache("Content", [contentId : contentId]); + TopScoreDocCollector collector = TopScoreDocCollector.create(100, false); //defaulting to 100 results + searcher.search(combQuery, collector); + ScoreDoc[] hits = collector.topDocs().scoreDocs; + Debug.logInfo("in search, hits:" + collector.getTotalHits(), ""); + + contentList = [] as ArrayList; + hitSet = [:] as HashSet; + for (int start = 0; start < collector.getTotalHits(); start++) { + Document doc = searcher.doc(hits[start].doc) + contentId = doc.get("contentId"); + content = delegator.findOne("Content", [contentId : contentId], true); if (!hitSet.contains(contentId)) { contentList.add(content); hitSet.add(contentId); |
| Free forum by Nabble | Edit this page |
