Skip to content
Snippets Groups Projects
Commit f68f2d2b authored by Eike Cochu's avatar Eike Cochu
Browse files

added search resource to rest project

moved esclient to utils, added elasticsearch to utils pom
parent aac07b82
No related branches found
No related tags found
No related merge requests found
......@@ -279,14 +279,6 @@
},
"buffers":
[
{
"file": "vipra-ui/app/templates/index.hbs",
"settings":
{
"buffer_size": 1290,
"line_ending": "Unix"
}
}
],
"build_system": "",
"build_system_choices":
......@@ -476,6 +468,8 @@
],
"file_history":
[
"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/index.hbs",
"/home/eike/Downloads/files.txt",
"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/application.hbs",
"/home/eike/repos/master/ma-impl/vipra-ui/app/components/pagination-bar.js",
"/home/eike/.cache/.fr-kZOCSD/META-INF/MANIFEST.MF",
......@@ -492,7 +486,6 @@
"/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/words/index.js",
"/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/words.js",
"/home/eike/repos/master/ma-impl/vipra-ui/app/adapters/application.js",
"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/index.hbs",
"/home/eike/repos/master/ma-impl/vipra-ui/app/styles/app.scss",
"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/is-empty.js",
"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/index.js",
......@@ -602,8 +595,7 @@
"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/articles/show.hbs",
"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/components/filter-text.js",
"/home/eike/Repositories/fu/ss15/ma/impl/vm/webapps/test/index.html",
"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/controllers/articles/list.js",
"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/router.js"
"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/controllers/articles/list.js"
],
"find":
{
......@@ -927,39 +919,8 @@
"groups":
[
{
"selected": 0,
"sheets":
[
{
"buffer": 0,
"file": "vipra-ui/app/templates/index.hbs",
"semi_transient": false,
"settings":
{
"buffer_size": 1290,
"regions":
{
},
"selection":
[
[
1271,
1271
]
],
"settings":
{
"syntax": "Packages/Handlebars/grammars/Handlebars.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 0,
"type": "text"
}
]
}
],
......
......@@ -31,13 +31,6 @@
<version>1.1.1</version>
</dependency>
<!-- ElasticSearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.1.0</version>
</dependency>
<!-- Stanford CoreNLP -->
<dependency>
<groupId>edu.stanford.nlp</groupId>
......
......@@ -9,10 +9,10 @@ import org.apache.logging.log4j.Logger;
import org.bson.types.ObjectId;
import org.elasticsearch.client.Client;
import de.vipra.cmd.es.ESClient;
import de.vipra.cmd.model.ProcessedArticle;
import de.vipra.util.Config;
import de.vipra.util.ConsoleUtils;
import de.vipra.util.ESClient;
import de.vipra.util.model.Import;
import de.vipra.util.model.TopicFull;
import de.vipra.util.model.Word;
......
......@@ -18,7 +18,6 @@ import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import de.vipra.cmd.es.ESClient;
import de.vipra.cmd.file.Filebase;
import de.vipra.cmd.file.FilebaseIndex;
import de.vipra.cmd.lda.LDAAnalyzer;
......@@ -28,6 +27,7 @@ import de.vipra.cmd.text.Processor;
import de.vipra.util.Config;
import de.vipra.util.Constants;
import de.vipra.util.ConvertStream;
import de.vipra.util.ESClient;
import de.vipra.util.ElasticSerializer;
import de.vipra.util.MongoUtils;
import de.vipra.util.StringUtils;
......
......@@ -6,8 +6,8 @@ import org.bson.types.ObjectId;
import org.elasticsearch.client.transport.NoNodeAvailableException;
import org.elasticsearch.client.transport.TransportClient;
import de.vipra.cmd.es.ESClient;
import de.vipra.util.Config;
import de.vipra.util.ESClient;
import de.vipra.util.model.Article;
import de.vipra.util.service.DatabaseService;
......
package de.vipra.rest.resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import de.vipra.rest.APIMediaType;
import de.vipra.rest.model.APIError;
import de.vipra.rest.model.Wrapper;
import de.vipra.util.Config;
import de.vipra.util.ESClient;
import de.vipra.util.MongoUtils;
import de.vipra.util.StringUtils;
import de.vipra.util.ex.ConfigException;
import de.vipra.util.model.ArticleFull;
@Path("search")
public class SearchResource {
@Context
UriInfo uri;
final TransportClient client;
public SearchResource(@Context ServletContext servletContext) throws IOException, ConfigException {
Config config = Config.getConfig();
client = ESClient.getClient(config);
}
@GET
@Produces(APIMediaType.APPLICATION_JSONAPI)
public Response search(@QueryParam("query") String query, @QueryParam("skip") Integer skip,
@QueryParam("limit") Integer limit, @QueryParam("excerpt") Integer excerpt) {
Wrapper<List<ArticleFull>> res = new Wrapper<>();
if (skip == null || skip < 0)
skip = 0;
if (limit == null || limit < 0)
limit = 20;
SearchResponse response = null;
try {
response = client.prepareSearch("articles").setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(QueryBuilders.multiMatchQuery(query, "_all")).setFrom(skip).setSize(limit).execute()
.actionGet();
} catch (Exception e) {
res.addError(new APIError(Response.Status.BAD_REQUEST, "Error", e.getMessage()));
return res.badRequest();
}
SearchHits hits = response.getHits();
List<ArticleFull> articles = new ArrayList<>(10);
for (SearchHit hit : hits) {
Map<String, Object> source = hit.getSource();
ArticleFull article = new ArticleFull();
article.setId(MongoUtils.objectId(hit.getId()));
article.setTitle(source.get("title").toString());
if (excerpt != null && excerpt > 0)
article.setText(StringUtils.ellipsize(source.get("text").toString(), excerpt));
articles.add(article);
}
res.addMeta("total", articles.size());
return res.ok(articles);
}
}
......@@ -50,5 +50,12 @@
<artifactId>jackson-annotations</artifactId>
<version>2.7.0</version>
</dependency>
<!-- ElasticSearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package de.vipra.cmd.es;
package de.vipra.util;
import java.net.InetAddress;
import java.net.UnknownHostException;
......@@ -6,14 +6,16 @@ import java.net.UnknownHostException;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import de.vipra.util.Config;
import de.vipra.util.Constants;
public abstract class ESClient {
private static TransportClient client;
public static TransportClient getClient(Config config) throws UnknownHostException {
return TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(Constants.ES_HOST), Constants.ES_PORT));
if (client == null) {
client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(Constants.ES_HOST), Constants.ES_PORT));
}
return client;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment