/* * * * Copyright 2014 Orient Technologies. * * * * 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.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.List; /** * Created by Enrico Risa on 22/04/15. */ @Test public class LuceneFacetTest extends BaseLuceneTest { @Test public void baseFacetTest() { ODocument doc = new ODocument("Item"); doc.field("name", "Pioneer"); doc.field("category", "Electronic/HiFi"); databaseDocumentTx.save(doc); doc = new ODocument("Item"); doc.field("name", "Hitachi"); doc.field("category", "Electronic/HiFi"); databaseDocumentTx.save(doc); doc = new ODocument("Item"); doc.field("name", "Philips"); doc.field("category", "Electronic/HiFi"); databaseDocumentTx.save(doc); doc = new ODocument("Item"); doc.field("name", "HP"); doc.field("category", "Electronic/Computer"); databaseDocumentTx.save(doc); List<ODocument> result = databaseDocumentTx.command( new OSQLSynchQuery<ODocument>("select *,$facet from Item where name lucene '(name:P*)' limit 1 ")).execute(); Assert.assertEquals(result.size(), 1); List<ODocument> facets = result.get(0).field("$facet"); Assert.assertEquals(facets.size(), 1); ODocument facet = facets.get(0); Assert.assertEquals(facet.field("childCount"), 1); Assert.assertEquals(facet.field("value"), 2); Assert.assertEquals(facet.field("dim"), "category"); List<ODocument> labelsValues = facet.field("labelsValue"); Assert.assertEquals(labelsValues.size(), 1); ODocument labelValues = labelsValues.get(0); Assert.assertEquals(labelValues.field("value"), 2); Assert.assertEquals(labelValues.field("label"), "Electronic"); result = databaseDocumentTx.command( new OSQLSynchQuery<ODocument>( "select *,$facet from Item where name lucene { 'q' : 'H*', 'drillDown' : 'category:Electronic' } limit 1 ")).execute(); Assert.assertEquals(result.size(), 1); facets = result.get(0).field("$facet"); Assert.assertEquals(facets.size(), 1); facet = facets.get(0); Assert.assertEquals(facet.field("childCount"), 2); Assert.assertEquals(facet.field("value"), 2); Assert.assertEquals(facet.field("dim"), "category"); labelsValues = facet.field("labelsValue"); Assert.assertEquals(labelsValues.size(), 2); labelValues = labelsValues.get(0); Assert.assertEquals(labelValues.field("value"), 1); Assert.assertEquals(labelValues.field("label"), "HiFi"); labelValues = labelsValues.get(1); Assert.assertEquals(labelValues.field("value"), 1); Assert.assertEquals(labelValues.field("label"), "Computer"); } @BeforeClass public void init() { initDB(); OSchema schema = databaseDocumentTx.getMetadata().getSchema(); OClass oClass = schema.createClass("Item"); oClass.createProperty("name", OType.STRING); oClass.createProperty("category", OType.STRING); databaseDocumentTx .command( new OCommandSQL( "create index Item.name_category on Item (name,category) FULLTEXT ENGINE LUCENE METADATA { 'facetFields' : ['category']}")) .execute(); } @AfterClass public void deInit() { deInitDB(); } @Override protected String getDatabaseName() { return "facetTest"; } }