| /* |
| * 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. |
| */ |
| |
| |
| import org.apache.lucene.analysis.core.WhitespaceAnalyzer |
| import org.apache.ofbiz.content.search.SearchWorker |
| |
| import org.apache.lucene.document.Document |
| import org.apache.lucene.index.DirectoryReader |
| import org.apache.lucene.queryparser.classic.ParseException |
| import org.apache.lucene.queryparser.classic.QueryParser |
| import org.apache.lucene.search.BooleanClause |
| import org.apache.lucene.search.BooleanQuery |
| import org.apache.lucene.search.IndexSearcher |
| import org.apache.lucene.search.Query |
| import org.apache.lucene.search.ScoreDoc |
| import org.apache.lucene.search.TopScoreDocCollector |
| import org.apache.lucene.store.FSDirectory |
| |
| if (parameters.luceneQuery) { |
| Query combQuery = new BooleanQuery() |
| IndexSearcher searcher |
| WhitespaceAnalyzer analyzer |
| try { |
| DirectoryReader reader = DirectoryReader.open(FSDirectory.open(new File(SearchWorker.getIndexPath("products")).toPath())) |
| searcher = new IndexSearcher(reader) |
| analyzer = new WhitespaceAnalyzer() |
| } catch (FileNotFoundException e) { |
| context.errorMessageList.add(e.getMessage()) |
| return |
| } |
| |
| QueryParser parser = new QueryParser("fullText", analyzer) |
| parser.setLocale(locale) |
| Query query |
| try { |
| query = parser.parse(parameters.luceneQuery) |
| } catch(ParseException pe) { |
| context.errorMessageList.add(pe.getMessage()) |
| return |
| } |
| combQuery.add(query, BooleanClause.Occur.MUST) |
| |
| TopScoreDocCollector collector = TopScoreDocCollector.create(100) // defaulting to 100 results |
| searcher.search(combQuery, collector) |
| ScoreDoc[] hits = collector.topDocs().scoreDocs |
| productList = [] |
| hits.each { hit -> |
| Document doc = searcher.doc(hit.doc) |
| productId = doc.productId |
| product = from("Product").where("productId", productId).cache(true).queryOne() |
| if (product) { |
| productList.add(product) |
| } |
| } |
| context.queryResults = productList |
| } |