/*
*
* * Copyright 2010-2016 OrientDB LTD (http://orientdb.com)
* *
* * 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 com.orientechnologies.lucene.test;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OSchema;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.OCommandSQL;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.memory.MemoryIndex;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
/**
* Created by Enrico Risa on 29/04/15.
*/
public class LuceneBooleanIndexTest extends BaseLuceneTest {
@Before
public void init() {
OSchema schema = db.getMetadata().getSchema();
OClass v = schema.getClass("V");
OClass song = schema.createClass("Person");
song.setSuperClass(v);
song.createProperty("isDeleted", OType.BOOLEAN);
db.command(new OCommandSQL("create index Person.isDeleted on Person (isDeleted) FULLTEXT ENGINE LUCENE"))
.execute();
}
@Test
public void insertPerson() {
for (int i = 0; i < 1000; i++) {
ODocument doc = new ODocument("Person");
doc.field("isDeleted", i % 2 == 0);
db.save(doc);
}
List<ODocument> docs = db
.query(new OSQLSynchQuery<ODocument>("select from Person where isDeleted lucene false"));
Assert.assertEquals(500, docs.size());
Assert.assertEquals(false, docs.get(0).field("isDeleted"));
docs = db.query(new OSQLSynchQuery<ODocument>("select from Person where isDeleted lucene true"));
Assert.assertEquals(500, docs.size());
Assert.assertEquals(true, docs.get(0).field("isDeleted"));
}
@Test
public void testMemoryIndex() throws ParseException {
// TODO To be used in evaluate Record
MemoryIndex index = new MemoryIndex();
Document doc = new Document();
doc.add(new StringField("text", "my text", Field.Store.YES));
StandardAnalyzer analyzer = new StandardAnalyzer();
for (IndexableField field : doc.getFields()) {
index.addField(field.name(), field.stringValue(), analyzer);
}
QueryParser parser = new QueryParser("text", analyzer);
float score = index.search(parser.parse("+text:my"));
}
}