/* * Copyright 2013, TopicQuests * * 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.topicquests.topicmap.json.model; import org.topicquests.model.api.ITicket; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.topicquests.common.api.ITopicQuestsOntology; import org.topicquests.model.api.query.IQueryIterator; import org.topicquests.model.api.query.IQueryModel; import org.topicquests.common.QueryUtil; /** * @author park * */ public class QueryModel implements IQueryModel { private JSONTopicmapEnvironment environment; private final String labelQuery = ITopicQuestsOntology.LABEL_PROPERTY; private final String detailsQuery = ITopicQuestsOntology.DETAILS_PROPERTY; private final String instanceQuery = ITopicQuestsOntology.INSTANCE_OF_PROPERTY_TYPE+":"; private final String subClassQuery = ITopicQuestsOntology.SUBCLASS_OF_PROPERTY_TYPE+":"; /** * */ public QueryModel(JSONTopicmapEnvironment env) { environment = env; } /* (non-Javadoc) * @see org.topicquests.model.api.IQueryModel#listNodesByLabel(java.lang.String, java.lang.String, int, java.util.Set) */ @Override public IQueryIterator listNodesByLabel(String label, String language, int count, ITicket credentials) { IQueryIterator itr = new QueryIterator(environment); //TODO do we need escapeQueryCulprits for ElasticSearch? QueryBuilder q = QueryBuilders.termQuery(makeField(label,language), QueryUtil.escapeQueryCulprits(label)); environment.logDebug("QueryModel.listNodesByDetails- "+q.toString()); itr.start(q.toString(), count, credentials); return itr; } /* (non-Javadoc) * @see org.topicquests.model.api.IQueryModel#listNodesByDetails(java.lang.String, java.lang.String, int, java.util.Set) */ @Override public IQueryIterator listNodesByDetails(String details, String language, int count, ITicket credentials) { IQueryIterator itr = new QueryIterator(environment); //TODO do we need escapeQueryCulprits for ElasticSearch? QueryBuilder q = QueryBuilders.termQuery(makeField(detailsQuery,language), QueryUtil.escapeQueryCulprits(details)); environment.logDebug("QueryModel.listNodesByDetails- "+q.toString()); itr.start(q.toString(), count, credentials); return itr; } /* (non-Javadoc) * @see org.topicquests.model.api.IQueryModel#listTuplesByRelation(java.lang.String, int, java.util.Set) */ @Override public IQueryIterator listTuplesByRelation(String relationType, int count, ITicket credentials) { IQueryIterator itr = new QueryIterator(environment); QueryBuilder q = QueryBuilders.termQuery(ITopicQuestsOntology.INSTANCE_OF_PROPERTY_TYPE, relationType); environment.logDebug("QueryModel.listTuplesByRelation- "+q.toString()); itr.start(q.toString(), count, credentials); return itr; } /* (non-Javadoc) * @see org.topicquests.model.api.IQueryModel#listNodeInstances(java.lang.String, int, java.util.Set) */ @Override public IQueryIterator listNodeInstances(String nodeTypeLocator, int count, ITicket credentials) { IQueryIterator itr = new QueryIterator(environment); QueryBuilder q = QueryBuilders.termQuery(ITopicQuestsOntology.INSTANCE_OF_PROPERTY_TYPE, nodeTypeLocator); environment.logDebug("QueryModel.listNodeInstances- "+q.toString()); itr.start(q.toString(), count, credentials); return itr; } /* (non-Javadoc) * @see org.topicquests.model.api.IQueryModel#listNodeSubclasses(java.lang.String, int, java.util.Set) */ @Override public IQueryIterator listNodeSubclasses(String superClassLocator, int count, ITicket credentials) { IQueryIterator itr = new QueryIterator(environment); QueryBuilder q = QueryBuilders.termQuery(ITopicQuestsOntology.SUBCLASS_OF_PROPERTY_TYPE, superClassLocator); environment.logDebug("QueryModel.listNodeSubclasses- "+q.toString()); itr.start(q.toString(), count, credentials); return itr; } /** * Calculate the appropriate Solr field * @param fieldBase * @param language * @return */ String makeField(String fieldBase, String language) { //TODO sort this out: do we still need it for non-SOLR topic maps? String result = fieldBase; if (!language.equals("en")) result += language; return result; } }