/* Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved. Contact: SYSTAP, LLC DBA Blazegraph 2501 Calvert ST NW #106 Washington, DC 20008 licenses@blazegraph.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Created on Jan 23, 2008 */ package com.bigdata.search; import java.io.StringReader; import java.util.concurrent.TimeUnit; import com.bigdata.journal.ITx; import com.bigdata.rdf.lexicon.ITextIndexer.FullTextQuery; /** * Simple test verifies that the {@link FullTextIndex} data are restart safe. * * @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a> * @version $Id$ */ public class TestSearchRestartSafe extends AbstractSearchTest { /** * */ public TestSearchRestartSafe() { } /** * @param arg0 */ public TestSearchRestartSafe(String arg0) { super(arg0); } // final File file; // { // // try { // // file = File.createTempFile(getName(), ".tmp"); // // System.err.println("file="+file); // // } catch (IOException ex) { // // throw new RuntimeException(ex); // // } // } // public Properties getProperties() { // // Properties properties = new Properties( super.getProperties() ); // // // Note: overrides the buffer mode so that we can re-open it. // properties.setProperty(Options.BUFFER_MODE, BufferMode.Disk // .toString()); // // properties.setProperty(Options.FILE,file.toString()); // // return properties; // // } public void test_simple() throws InterruptedException { final boolean prefixMatch = false; final double minCosine = .4; final double maxCosine = 1.0d; final int minRank = 1; final int maxRank = Integer.MAX_VALUE;// (was 10000) final boolean matchAllTerms = false; final long timeout = Long.MAX_VALUE; final TimeUnit unit = TimeUnit.MILLISECONDS; final String regex = null; init(); /* * Index a document. */ final long docId = 12L; final int fieldId = 3; final String text = "The quick brown dog"; final String languageCode = "EN"; { final TokenBuffer<Long> buffer = new TokenBuffer<Long>(2, getNdx()); getNdx().index(buffer, docId, fieldId, languageCode, new StringReader(text)); getNdx().index(buffer, docId + 1, fieldId, languageCode, new StringReader("The slow brown cow")); buffer.flush(); } /* Search w/o restart. */ { final FullTextIndex<Long> ndx = new FullTextIndex<Long>(getIndexManager(), getNamespace(), ITx.UNISOLATED, getSearchProperties()); final Hiterator<?> itr = // ndx.search( // text, languageCode // ); ndx.search(new FullTextQuery(text, languageCode, prefixMatch, regex, matchAllTerms, false/* matchExact*/, minCosine, maxCosine, minRank, maxRank, timeout, unit)); assertEquals(1, itr.size()); // Note: 2nd result pruned by cosine. assertTrue(itr.hasNext()); final IHit<?> hit1 = itr.next(); if(log.isInfoEnabled()) log.info("hit1:" + hit1); // /* // * Note: with cosine computation only the first hit is visited. // */ assertFalse(itr.hasNext()); } /* * Shutdown and restart. */ setIndexManager(reopenStore(getIndexManager())); /* Search with restart. */ { final FullTextIndex<Long> ndx = new FullTextIndex<Long>(getIndexManager(), getNamespace(), ITx.UNISOLATED, getSearchProperties()); final Hiterator<?> itr = // ndx.search(text, languageCode); ndx.search(new FullTextQuery(text, languageCode, prefixMatch, regex, matchAllTerms, false/* matchExact*/, minCosine, maxCosine, minRank, maxRank, timeout, unit)); assertEquals(1, itr.size()); // Note: 2nd result pruned by cosine. assertTrue(itr.hasNext()); final IHit<?> hit1 = itr.next(); if(log.isInfoEnabled()) log.info("hit1:" + hit1); // /* // * Note: with cosine computation only the first hit is visited. // */ assertFalse(itr.hasNext()); } } }