/* Copyright 2013 Fabian Steeg, hbz. Licensed under the Eclipse Public License 1.0 */ package models.queries; import static org.elasticsearch.index.query.QueryBuilders.multiMatchQuery; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.elasticsearch.index.query.MatchQueryBuilder.Operator; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; /** * Queries on the lobid-organisations index. * * @author Fabian Steeg (fsteeg) */ public class LobidOrganisations { /** * Query against all fields. */ public static class AllFieldsQuery extends AbstractIndexQuery { @Override public List<String> fields() { final List<String> searchFields = new ArrayList<>(Arrays.asList("_all")); final List<String> suggestFields = new NameQuery().fields(); searchFields.addAll(suggestFields); return searchFields; } @Override public QueryBuilder build(final String queryString) { return QueryBuilders.queryString(queryString).field(fields().get(0)); } } /** * Query the lobid-organisations index using an organisation's ID. */ public static class IdQuery extends AbstractIndexQuery { @Override public List<String> fields() { return Arrays.asList("@graph.http://purl.org/lobid/lv#isil.@value"); } @Override public QueryBuilder build(final String queryString) { final String itemPrefix = "http://lobid.org/organisation/"; return QueryBuilders.idsQuery("json-ld-lobid-orgs") .ids(itemPrefix + queryString.replace(itemPrefix, "")); } } /** * Query the lobid-organisations index using an organisation's name. */ public static class NameQuery extends AbstractIndexQuery { @Override public List<String> fields() { List<String> fields = new ArrayList<>(); fields .addAll(Arrays.asList("@graph.http://xmlns.com/foaf/0.1/name.@value", "@graph.http://www.w3.org/2004/02/skos/core#prefLabel.@value", "@graph.http://www.w3.org/2004/02/skos/core#altLabel.@value")); fields.addAll(new IdQuery().fields()); return fields; } @Override public QueryBuilder build(final String queryString) { return multiMatchQuery(queryString, fields().toArray(new String[] {})) .operator(Operator.AND); } } }