public static EsDocumentOperations getInstance(ElasticConnection connection, String indexName, String type) { return new EsDocumentOperations(connection, indexName, type); }
private void applyFields(XContentBuilder builder, HttpArticle article, Map<String, Object> fields) throws IOException { applyField(builder, URL_FIELD, fields, article.getUrl()); applyField(builder, SOURCE_FIELD, fields, article.getSource()); applyField(builder, CREATED_FIELD, fields, new Date()); applyField(builder, UPDATED_FIELD, fields, new Date()); applyField(builder, PUBLISHED_FIELD, fields, article.getPublished()); applyField(builder, DISCOVERED_FIELD, fields, article.getDiscovered()); applyField(builder, TITLE_FIELD, fields, article.getTitle()); applyField(builder, TEXT_FIELD, fields, article.getText()); applyField(builder, STATUS_FIELD, fields, "NEW"); applyField(builder, APP_IDS_FIELD, fields, article.getAppIds()); applyField(builder, CATEGORIES_FIELD, fields, article.getCategories()); for (Map.Entry<String, Object> fieldValue : fields.entrySet()) { if (!DEFAULT_FIELDS.contains(fieldValue.getKey())) { applyField(builder, fieldValue.getKey(), fields, null); } } }
public void store(HttpArticle article, Map<String, Object> fields) throws IOException { XContentBuilder jsonBuilder = jsonBuilder(); jsonBuilder.startObject(); applyFields(jsonBuilder, article, fields); jsonBuilder.endObject(); IndexRequestBuilder insert = getConnection().getClient() .prepareIndex(getIndex(), getType(), article.getUrl()) .setSource(jsonBuilder); getConnection().getProcessor().add(insert.request()); }
public PageableList<HttpArticle> query(NamedQuery... queries) { BoolQueryBuilder query = QueryBuilders.boolQuery(); for (NamedQuery nq : queries) { addQuery(query, true, nq.getNotStemmedCaseSensitive(), "nostem_cs"); addQuery(query, true, nq.getNotStemmedCaseInSensitive(), "nostem_ci"); addQuery(query, true, nq.getStemmedCaseSensitive(), "stem_cs"); addQuery(query, true, nq.getStemmedCaseInSensitive(), "stem_ci"); if (!Strings.isNullOrEmpty(nq.getAdvanced())) { query.must(QueryBuilders.queryStringQuery(nq.getAdvanced()) .defaultOperator(Operator.AND)); } } SearchResponse response = getConnection().getClient().prepareSearch(getIndex()) .setTypes(getType()) .setQuery(query) .setSize(100) .setFetchSource(true) .addSort(PUBLISHED_FIELD, SortOrder.DESC) .setExplain(false) .execute() .actionGet(); List<HttpArticle> items = Arrays.stream(response.getHits().getHits()) .map(SearchHit::getSource) .filter(Objects::nonNull) .map(this::mapToHttpArticle) .collect(Collectors.toList()); return PageableList.create(items, response.getHits().getTotalHits()); }
public void updateStatus(String url, String status) throws IOException { UpdateRequestBuilder update = getConnection().getClient() .prepareUpdate(getIndex(), getType(), url) .setDoc(jsonBuilder() .startObject() .field(STATUS_FIELD, status) .endObject()); getConnection().getProcessor().add(update.request()); }
public void store(HttpArticle article) throws IOException { store(article, Collections.emptyMap()); }
private HighlightedSearchResult mapToHighlightedResult(SearchHit hit) { HttpArticle article = mapToHttpArticle(hit.getSource()); List<String> highlights = Lists.newArrayList(); for (Map.Entry<String, HighlightField> fields : hit.getHighlightFields().entrySet()) { for (Text text : fields.getValue().getFragments()) { highlights.add(text.toString()); } } return new HighlightedSearchResult(article, highlights); }
public static EsDocumentOperations getDocumentOperations() { if (DOCUMENT_OPERATIONS == null) { String index = Configuration.INSTANCE.getString(ElasticConstants.ES_DOCS_INDEX_NAME_PARAM); String type = Configuration.INSTANCE.getString(ElasticConstants.ES_DOCS_DOC_TYPE_PARAM); DOCUMENT_OPERATIONS = EsDocumentOperations.getInstance(getEsConnection(), index, type); } return DOCUMENT_OPERATIONS; }
public PageableList<HighlightedSearchResult> query(List<NamedQuery> included, List<NamedQuery> excluded, String additional) { BoolQueryBuilder query = QueryBuilders.boolQuery(); for (NamedQuery nq : included) { addQuery(query, true, nq.getNotStemmedCaseSensitive(), "nostem_cs"); addQuery(query, true, nq.getNotStemmedCaseInSensitive(), "nostem_ci"); addQuery(query, true, nq.getStemmedCaseSensitive(), "stem_cs"); addQuery(query, true, nq.getStemmedCaseInSensitive(), "stem_ci"); if (!Strings.isNullOrEmpty(nq.getAdvanced())) { query.must(QueryBuilders.queryStringQuery(nq.getAdvanced()) addQuery(query, false, nq.getNotStemmedCaseSensitive(), "nostem_cs"); addQuery(query, false, nq.getNotStemmedCaseInSensitive(), "nostem_ci"); addQuery(query, false, nq.getStemmedCaseSensitive(), "stem_cs"); addQuery(query, false, nq.getStemmedCaseInSensitive(), "stem_ci"); if (!Strings.isNullOrEmpty(nq.getAdvanced())) { query.mustNot(QueryBuilders.queryStringQuery(nq.getAdvanced()) .defaultOperator(Operator.AND)); SearchResponse response = getConnection().getClient().prepareSearch(getIndex()) .setTypes(getType()) .setQuery(query) .setSize(100)
public List<HttpArticle> findByStatus(String status, int count) { BoolQueryBuilder filter = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery(STATUS_FIELD, String.valueOf(status))); SearchResponse response = getConnection().getClient() .prepareSearch(getIndex()) .setTypes(getType()) .setSearchType(SearchType.DEFAULT) .setPostFilter(filter) .addSort(CREATED_FIELD, SortOrder.DESC) .setSize(count) .setFetchSource(true) .setExplain(false) .execute() .actionGet(); SearchHits hits = response.getHits(); return Arrays.stream(hits.getHits()) .map(SearchHit::getSource) .map(this::mapToHttpArticle) .collect(Collectors.toList()); }