/*
* Copyright 2004-2009 the original author or authors.
*
* Licensed 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.
*/
package org.compass.core.test.property.storeindex;
import org.apache.lucene.index.TermFreqVector;
import org.apache.lucene.index.TermPositionVector;
import org.apache.lucene.index.TermVectorOffsetInfo;
import org.compass.core.CompassHits;
import org.compass.core.CompassSession;
import org.compass.core.CompassTransaction;
import org.compass.core.Resource;
import org.compass.core.lucene.util.LuceneHelper;
import org.compass.core.test.AbstractTestCase;
/**
* @author kimchy
*/
public class StoreIndexTests extends AbstractTestCase {
protected String[] getMappings() {
return new String[]{"property/storeindex/mapping.cpm.xml"};
}
public void testInternalIdWithStoreNo() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a2", a);
session.loadResource("a2", id);
a = (A) session.load("a2", id);
assertEquals("first test string", a.getValue());
tr.commit();
session.close();
}
public void testStoreYesIndexTokenized() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a1", a);
a = (A) session.load("a1", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a1", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(true, r.getProperty("mvalue1").isTokenized());
CompassHits hits = session.find("mvalue1:test");
assertEquals(1, hits.getLength());
tr.commit();
session.close();
}
public void testStoreNoIndexTokenized() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a3", a);
a = (A) session.load("a3", id);
assertEquals("first test string", a.getValue());
tr.commit();
session.close();
session = openSession();
tr = session.beginTransaction();
Resource r = session.loadResource("a3", id);
assertNull(r.getValue("mvalue1"));
CompassHits hits = session.find("mvalue1:test");
assertEquals(1, hits.getLength());
tr.commit();
session.close();
}
public void testStoreYesIndexUnTokenized() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a4", a);
a = (A) session.load("a4", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a4", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(false, r.getProperty("mvalue1").isCompressed());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(false, r.getProperty("mvalue1").isTokenized());
CompassHits hits = session.find("mvalue1:test");
assertEquals(0, hits.getLength());
tr.commit();
session.close();
}
public void testStoreComressIndexTokenized() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a5", a);
a = (A) session.load("a5", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a5", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(true, r.getProperty("mvalue1").isCompressed());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(true, r.getProperty("mvalue1").isTokenized());
CompassHits hits = session.find("mvalue1:test");
assertEquals(1, hits.getLength());
tr.commit();
session.close();
}
public void testStoreCompressIndexNo() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a6", a);
a = (A) session.load("a6", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a6", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(false, r.getProperty("mvalue1").isCompressed());
assertEquals(false, r.getProperty("mvalue1").isIndexed());
assertEquals(false, r.getProperty("mvalue1").isTokenized());
CompassHits hits = session.find("mavlue1:test");
assertEquals(0, hits.getLength());
tr.commit();
session.close();
}
public void testTermVectorNo() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a7", a);
a = (A) session.load("a7", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a7", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(false, r.getProperty("mvalue1").isTermVectorStored());
TermFreqVector termInfoVector = LuceneHelper.getTermFreqVector(session, r, "mvalue1");
assertNull(termInfoVector);
TermFreqVector[] termInfoVectors = LuceneHelper.getTermFreqVectors(session, r);
assertNull(termInfoVectors);
tr.commit();
session.close();
}
public void testTermVectorYes() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a8", a);
a = (A) session.load("a8", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a8", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(true, r.getProperty("mvalue1").isTermVectorStored());
TermFreqVector termInfoVector = LuceneHelper.getTermFreqVector(session, r, "mvalue1");
assertEquals("mvalue1", termInfoVector.getField());
String[] terms = termInfoVector.getTerms();
assertEquals(3, terms.length);
assertEquals("first", terms[0]);
assertEquals("string", terms[1]);
assertEquals("test", terms[2]);
int[] freqs = termInfoVector.getTermFrequencies();
assertEquals(3, freqs.length);
try {
((TermPositionVector) termInfoVector).getTermPositions(0);
fail();
} catch (Exception e) {
}
try {
((TermPositionVector) termInfoVector).getOffsets(0);
fail();
} catch (Exception e) {
}
TermFreqVector[] termInfoVectors = LuceneHelper.getTermFreqVectors(session, r);
assertEquals(1, termInfoVectors.length);
tr.commit();
session.close();
}
public void testTermVectorYesWithPositions() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a9", a);
a = (A) session.load("a9", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a9", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(true, r.getProperty("mvalue1").isTermVectorStored());
TermFreqVector termInfoVector = LuceneHelper.getTermFreqVector(session, r, "mvalue1");
assertEquals("mvalue1", termInfoVector.getField());
String[] terms = termInfoVector.getTerms();
assertEquals(3, terms.length);
assertEquals("first", terms[0]);
assertEquals("string", terms[1]);
assertEquals("test", terms[2]);
int[] freqs = termInfoVector.getTermFrequencies();
assertEquals(3, freqs.length);
int[] positions = ((TermPositionVector) termInfoVector).getTermPositions(0);
assertNotNull(positions);
assertEquals(1, positions.length);
TermVectorOffsetInfo[] offsets = ((TermPositionVector) termInfoVector).getOffsets(0);
assertNull(offsets);
TermFreqVector[] termInfoVectors = LuceneHelper.getTermFreqVectors(session, r);
assertEquals(1, termInfoVectors.length);
tr.commit();
session.close();
}
public void testTermVectorYesWithOffsets() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a10", a);
a = (A) session.load("a10", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a10", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(true, r.getProperty("mvalue1").isTermVectorStored());
TermFreqVector termInfoVector = LuceneHelper.getTermFreqVector(session, r, "mvalue1");
assertEquals("mvalue1", termInfoVector.getField());
String[] terms = termInfoVector.getTerms();
assertEquals(3, terms.length);
assertEquals("first", terms[0]);
assertEquals("string", terms[1]);
assertEquals("test", terms[2]);
int[] freqs = termInfoVector.getTermFrequencies();
assertEquals(3, freqs.length);
int[] positions = ((TermPositionVector) termInfoVector).getTermPositions(0);
assertNull(positions);
TermVectorOffsetInfo[] offsets = ((TermPositionVector) termInfoVector).getOffsets(0);
assertNotNull(offsets);
assertEquals(1, offsets.length);
TermFreqVector[] termInfoVectors = LuceneHelper.getTermFreqVectors(session, r);
assertEquals(1, termInfoVectors.length);
tr.commit();
session.close();
}
public void testTermVectorYesWithPostionsAndOffsets() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a11", a);
verifyTermVectorYesWithPostionsAndOffsets(session);
tr.commit();
session.close();
// now test with non transactional data
session = openSession();
tr = session.beginTransaction();
verifyTermVectorYesWithPostionsAndOffsets(session);
tr.commit();
session.close();
}
private void verifyTermVectorYesWithPostionsAndOffsets(CompassSession session) {
Long id = new Long(1);
A a = (A) session.load("a11", id);
assertEquals("first test string", a.getValue());
Resource r = session.loadResource("a11", id);
assertNotNull(r.getValue("mvalue1"));
assertEquals(true, r.getProperty("mvalue1").isStored());
assertEquals(true, r.getProperty("mvalue1").isIndexed());
assertEquals(true, r.getProperty("mvalue1").isTermVectorStored());
TermFreqVector termInfoVector = LuceneHelper.getTermFreqVector(session, r, "mvalue1");
assertEquals("mvalue1", termInfoVector.getField());
String[] terms = termInfoVector.getTerms();
assertEquals(3, terms.length);
assertEquals("first", terms[0]);
assertEquals("string", terms[1]);
assertEquals("test", terms[2]);
int[] freqs = termInfoVector.getTermFrequencies();
assertEquals(3, freqs.length);
int[] positions = ((TermPositionVector) termInfoVector).getTermPositions(0);
assertNotNull(positions);
assertEquals(1, positions.length);
TermVectorOffsetInfo[] offsets = ((TermPositionVector) termInfoVector).getOffsets(0);
assertNotNull(offsets);
assertEquals(1, offsets.length);
TermFreqVector[] termInfoVectors = LuceneHelper.getTermFreqVectors(session, r);
assertEquals(1, termInfoVectors.length);
}
public void testStoreNoIndexNotSpecifiedTokenized() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
CompassHits hits = session.find("mvalue1:test");
assertEquals(0, hits.getLength());
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a12", a);
a = (A) session.load("a12", id);
assertEquals("first test string", a.getValue());
tr.commit();
session.close();
session = openSession();
tr = session.beginTransaction();
Resource r = session.loadResource("a12", id);
assertNull(r.getValue("mvalue1"));
hits = session.find("mvalue1:test");
assertEquals(1, hits.getLength());
tr.commit();
session.close();
}
public void testStoreNoManagedIdFalse() {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
CompassHits hits = session.find("mvalue1:test");
assertEquals(0, hits.getLength());
Long id = new Long(1);
A a = new A();
a.setId(id);
a.setValue("first test string");
session.save("a13", a);
a = (A) session.load("a13", id);
assertNull(a.getValue());
tr.commit();
session.close();
}
}