| | |
| | | mergesha(Type.STRING), |
| | | mergeto(Type.STRING), |
| | | patchsets(Type.INT), |
| | | votes(Type.INT); |
| | | votes(Type.INT), |
| | | //NOTE: Indexing on the underlying value to allow flexibility on naming |
| | | priority(Type.INT), |
| | | severity(Type.INT); |
| | | |
| | | final Type fieldType; |
| | | |
| | |
| | | |
| | | private final Logger log = LoggerFactory.getLogger(getClass()); |
| | | |
| | | private final Version luceneVersion = Version.LUCENE_46; |
| | | private final Version luceneVersion = Version.LUCENE_5_2_1; |
| | | |
| | | private final File luceneDir; |
| | | |
| | |
| | | public boolean deleteAll(RepositoryModel repository) { |
| | | try { |
| | | IndexWriter writer = getWriter(); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(luceneVersion); |
| | | QueryParser qp = new QueryParser(luceneVersion, Lucene.rid.name(), analyzer); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(); |
| | | QueryParser qp = new QueryParser(Lucene.rid.name(), analyzer); |
| | | BooleanQuery query = new BooleanQuery(); |
| | | query.add(qp.parse(repository.getRID()), Occur.MUST); |
| | | |
| | |
| | | * @return true, if deleted, false if no record was deleted |
| | | */ |
| | | private boolean delete(String repository, long ticketId, IndexWriter writer) throws Exception { |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(luceneVersion); |
| | | QueryParser qp = new QueryParser(luceneVersion, Lucene.did.name(), analyzer); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(); |
| | | QueryParser qp = new QueryParser(Lucene.did.name(), analyzer); |
| | | BooleanQuery query = new BooleanQuery(); |
| | | query.add(qp.parse(StringUtils.getSHA1(repository + ticketId)), Occur.MUST); |
| | | |
| | |
| | | return Collections.emptyList(); |
| | | } |
| | | Set<QueryResult> results = new LinkedHashSet<QueryResult>(); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(luceneVersion); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(); |
| | | try { |
| | | // search the title, description and content |
| | | BooleanQuery query = new BooleanQuery(); |
| | | QueryParser qp; |
| | | |
| | | qp = new QueryParser(luceneVersion, Lucene.title.name(), analyzer); |
| | | qp = new QueryParser(Lucene.title.name(), analyzer); |
| | | qp.setAllowLeadingWildcard(true); |
| | | query.add(qp.parse(text), Occur.SHOULD); |
| | | |
| | | qp = new QueryParser(luceneVersion, Lucene.body.name(), analyzer); |
| | | qp = new QueryParser(Lucene.body.name(), analyzer); |
| | | qp.setAllowLeadingWildcard(true); |
| | | query.add(qp.parse(text), Occur.SHOULD); |
| | | |
| | | qp = new QueryParser(luceneVersion, Lucene.content.name(), analyzer); |
| | | qp = new QueryParser(Lucene.content.name(), analyzer); |
| | | qp.setAllowLeadingWildcard(true); |
| | | query.add(qp.parse(text), Occur.SHOULD); |
| | | |
| | |
| | | |
| | | log.debug(rewrittenQuery.toString()); |
| | | |
| | | TopScoreDocCollector collector = TopScoreDocCollector.create(5000, true); |
| | | TopScoreDocCollector collector = TopScoreDocCollector.create(5000); |
| | | searcher.search(rewrittenQuery, collector); |
| | | int offset = Math.max(0, (page - 1) * pageSize); |
| | | ScoreDoc[] hits = collector.topDocs(offset, pageSize).scoreDocs; |
| | |
| | | } |
| | | |
| | | Set<QueryResult> results = new LinkedHashSet<QueryResult>(); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(luceneVersion); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(); |
| | | try { |
| | | QueryParser qp = new QueryParser(luceneVersion, Lucene.content.name(), analyzer); |
| | | QueryParser qp = new QueryParser(Lucene.content.name(), analyzer); |
| | | Query query = qp.parse(queryText); |
| | | |
| | | IndexSearcher searcher = getSearcher(); |
| | |
| | | |
| | | private IndexWriter getWriter() throws IOException { |
| | | if (writer == null) { |
| | | Directory directory = FSDirectory.open(luceneDir); |
| | | Directory directory = FSDirectory.open(luceneDir.toPath()); |
| | | |
| | | if (!luceneDir.exists()) { |
| | | luceneDir.mkdirs(); |
| | | } |
| | | |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(luceneVersion); |
| | | IndexWriterConfig config = new IndexWriterConfig(luceneVersion, analyzer); |
| | | StandardAnalyzer analyzer = new StandardAnalyzer(); |
| | | IndexWriterConfig config = new IndexWriterConfig(analyzer); |
| | | config.setOpenMode(OpenMode.CREATE_OR_APPEND); |
| | | writer = new IndexWriter(directory, config); |
| | | } |
| | |
| | | toDocField(doc, Lucene.watchedby, StringUtils.flattenStrings(ticket.getWatchers(), ";").toLowerCase()); |
| | | toDocField(doc, Lucene.mentions, StringUtils.flattenStrings(ticket.getMentions(), ";").toLowerCase()); |
| | | toDocField(doc, Lucene.votes, ticket.getVoters().size()); |
| | | toDocField(doc, Lucene.priority, ticket.priority.getValue()); |
| | | toDocField(doc, Lucene.severity, ticket.severity.getValue()); |
| | | |
| | | List<String> attachments = new ArrayList<String>(); |
| | | for (Attachment attachment : ticket.getAttachments()) { |
| | |
| | | result.participants = unpackStrings(doc, Lucene.participants); |
| | | result.watchedby = unpackStrings(doc, Lucene.watchedby); |
| | | result.mentions = unpackStrings(doc, Lucene.mentions); |
| | | result.priority = TicketModel.Priority.fromObject(unpackInt(doc, Lucene.priority), TicketModel.Priority.defaultPriority); |
| | | result.severity = TicketModel.Severity.fromObject(unpackInt(doc, Lucene.severity), TicketModel.Severity.defaultSeverity); |
| | | |
| | | if (!StringUtils.isEmpty(doc.get(Lucene.patchset.name()))) { |
| | | // unpack most recent patchset |