/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.jena.query.text;
import org.apache.jena.query.Dataset ;
import org.apache.jena.query.DatasetFactory ;
import org.apache.jena.query.text.assembler.TextVocab ;
import org.apache.jena.sparql.core.DatasetGraph ;
import org.apache.jena.sparql.core.assembler.AssemblerUtils ;
import org.apache.jena.sparql.util.Context ;
import org.apache.jena.system.JenaSystem ;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.store.Directory ;
import org.apache.solr.client.solrj.SolrServer ;
public class TextDatasetFactory
{
static { JenaSystem.init(); }
/** Use an assembler file to build a dataset with text search capabilities */
public static Dataset create(String assemblerFile)
{
return (Dataset)AssemblerUtils.build(assemblerFile, TextVocab.textDataset) ;
}
/** Create a text-indexed dataset */
public static Dataset create(Dataset base, TextIndex textIndex)
{
return create(base, textIndex, false);
}
/** Create a text-indexed dataset, optionally allowing the text index to be closed if the Dataset is */
public static Dataset create(Dataset base, TextIndex textIndex, boolean closeIndexOnDSGClose)
{
DatasetGraph dsg = base.asDatasetGraph() ;
dsg = create(dsg, textIndex, closeIndexOnDSGClose) ;
return DatasetFactory.wrap(dsg) ;
}
/** Create a text-indexed dataset, optionally allowing the text index to be closed if the Dataset is */
public static Dataset create(Dataset base, TextIndex textIndex, boolean closeIndexOnDSGClose, TextDocProducer producer)
{
DatasetGraph dsg = base.asDatasetGraph() ;
dsg = create(dsg, textIndex, closeIndexOnDSGClose, producer) ;
return DatasetFactory.wrap(dsg) ;
}
/** Create a text-indexed DatasetGraph */
public static DatasetGraph create(DatasetGraph dsg, TextIndex textIndex)
{
return create(dsg, textIndex, false);
}
/** Create a text-indexed DatasetGraph, optionally allowing the text index to be closed if the DatasetGraph is */
public static DatasetGraph create(DatasetGraph dsg, TextIndex textIndex, boolean closeIndexOnDSGClose)
{
return create(dsg, textIndex, closeIndexOnDSGClose, null);
}
/** Create a text-indexed DatasetGraph, optionally allowing the text index to be closed if the DatasetGraph is */
public static DatasetGraph create(DatasetGraph dsg, TextIndex textIndex, boolean closeIndexOnDSGClose, TextDocProducer producer) {
if (producer == null) producer = new TextDocProducerTriples(textIndex) ;
DatasetGraph dsgt = new DatasetGraphText(dsg, textIndex, producer, closeIndexOnDSGClose) ;
// Also set on dsg
Context c = dsgt.getContext() ;
c.set(TextQuery.textIndex, textIndex) ;
return dsgt ;
}
/**
* Create a Lucene TextIndex
*
* @param directory The Lucene Directory for the index
* @param def The EntityDefinition that defines how entities are stored in the index
* @param queryAnalyzer The analyzer to be used to find terms in the query text. If null, then the analyzer defined by the EntityDefinition will be used.
*/
public static TextIndex createLuceneIndex(Directory directory, EntityDefinition def, Analyzer queryAnalyzer)
{
TextIndexConfig config = new TextIndexConfig(def);
config.setQueryAnalyzer(queryAnalyzer);
return createLuceneIndex(directory, config);
}
/**
* Create a Lucene TextIndex
*
* @param directory The Lucene Directory for the index
* @param config The config definition for the index instantiation.
*/
public static TextIndex createLuceneIndex(Directory directory, TextIndexConfig config)
{
TextIndex index;
if (config.isMultilingualSupport())
index = new TextIndexLuceneMultilingual(directory, config) ;
else
index = new TextIndexLucene(directory, config) ;
return index ;
}
/**
* Create a text-indexed dataset, using Lucene
*
* @param base the base Dataset
* @param directory The Lucene Directory for the index
* @param def The EntityDefinition that defines how entities are stored in the index
* @param queryAnalyzer The analyzer to be used to find terms in the query text. If null, then the analyzer defined by the EntityDefinition will be used.
*/
public static Dataset createLucene(Dataset base, Directory directory, EntityDefinition def, Analyzer queryAnalyzer)
{
TextIndexConfig config = new TextIndexConfig(def);
config.setQueryAnalyzer(queryAnalyzer);
return createLucene(base, directory, config);
}
/**
* Create a text-indexed dataset, using Lucene
*
* @param base the base Dataset
* @param directory The Lucene Directory for the index
* @param config The config definition for the index instantiation.
*/
public static Dataset createLucene(Dataset base, Directory directory, TextIndexConfig config)
{
TextIndex index = createLuceneIndex(directory, config) ;
return create(base, index, true) ;
}
/**
* Create a text-indexed dataset, using Lucene
*
* @param base the base DatasetGraph
* @param directory The Lucene Directory for the index
* @param def The EntityDefinition that defines how entities are stored in the index
* @param queryAnalyzer The analyzer to be used to find terms in the query text. If null, then the analyzer defined by the EntityDefinition will be used.
*/
public static DatasetGraph createLucene(DatasetGraph base, Directory directory, EntityDefinition def, Analyzer queryAnalyzer)
{
TextIndexConfig config = new TextIndexConfig(def);
config.setQueryAnalyzer(queryAnalyzer);
return createLucene(base, directory, config) ;
}
/**
* Create a text-indexed dataset, using Lucene
*
* @param base the base DatasetGraph
* @param directory The Lucene Directory for the index
* @param config The config definition for the index instantiation.
*/
public static DatasetGraph createLucene(DatasetGraph base, Directory directory, TextIndexConfig config)
{
TextIndex index = createLuceneIndex(directory, config) ;
return create(base, index, true) ;
}
/** Create a Solr TextIndex */
public static TextIndex createSolrIndex(SolrServer server, EntityDefinition entMap)
{
TextIndex index = new TextIndexSolr(server, entMap) ;
return index ;
}
/** Create a text-indexed dataset, using Solr */
public static Dataset createSolrIndex(Dataset base, SolrServer server, EntityDefinition entMap)
{
TextIndex index = createSolrIndex(server, entMap) ;
return create(base, index, true) ;
}
/** Create a text-indexed dataset, using Solr */
public static DatasetGraph createSolrIndex(DatasetGraph base, SolrServer server, EntityDefinition entMap)
{
TextIndex index = createSolrIndex(server, entMap) ;
return create(base, index, true) ;
}
}