picturesafe-search

Add sophisticated search and analytic capabilities to your application

Integrate our opinionated Java service wrapper as a library or as a headless search Acceleration Server to your solution.

picturesafe logo

Powerful concepts and abstractions

Our opinionated approach - proven by successful solutions crafted in multiple man years - head starts and accelerates your development on a future-proof track, eliminating your need to fully cover the complexity of fulltext and analytics concepts and shielding you from the complexity of the Elasticsearch REST APIs.

Proven, rock solid technology stack

We use Elasticsearch as our technology foundation. This is one of the best available search and analytic technologies currently available, based on Apache Lucene.

% http localhost:9200
HTTP/1.1 200 OK
content-encoding: gzip
content-length: 324
content-type: application/json; charset=UTF-8

{
    "cluster_name": "elastic-test",
    "cluster_uuid": "43nL8XoORrm9WyboeVSlQQ",
    "name": "es01",
    "tagline": "You Know, for Search",
    "version": {
        "build_date": "2020-02-06T00:09:00.449973Z",
        "build_flavor": "default",
        "build_hash": "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
        "build_snapshot": false,
        "build_type": "docker",
        "lucene_version": "8.4.0",
        "minimum_index_compatibility_version": "6.0.0-beta1",
        "minimum_wire_compatibility_version": "6.8.0",
        "number": "7.6.0"
    }
}

Central Index and Field Definitions

By defining these structures first, you can focus on the non-technical aspects. These definitions are reused in indexing and search and analytics.

@Configuration
@ComponentScan(basePackages = {"de.picturesafe.search.elasticsearch"})
@Import({DefaultElasticConfiguration.class})
public class Config {
    @Bean
    List<FieldConfiguration> fieldConfigurations() {
        return Arrays.asList(
            FieldConfiguration.ID_FIELD,
            FieldConfiguration.FULLTEXT_FIELD,
            StandardFieldConfiguration.builder(
                  "title", ElasticsearchType.TEXT)
                  .copyToFulltext(true)
                  .sortable(true)
                  .build()
            );
    }
}

Powerful Search Capabilities

Focus on what you want to search. A simple but extensible Java API supports you to integrate elasticsearch-based searches in your projects fast and easily. The picturesafe-search API hides the details you don't care about.

Expression expression = OperationExpression.and(
    new FulltextExpression("picturesafe-search"),
    new ValueExpression("easy", true));

SearchResult result = singleIndexElasticsearchService
    .search(expression, SearchParameter.DEFAULT);

Analytics at your Fingertips

Get aggregations (or facets) for your search results easily. Provide your users with fast drill-down or 'search after search' capabilities to help them find what they want - without forcing them to learn and use a complicated search syntax.

SearchParameter searchParameter = SearchParameter.builder()
    .pageSize(20)
    .pageIndex(1)
    .sortOptions(SortOption.asc("id"))
    .aggregations(DefaultAggregation.field("city"))
    .build();

SearchResult searchResult = service.search(expression, searchParameter);

for (ResultFacet resultFacet : searchResult.getFacets()) {
    String facetName = resultFacet.getName();
    long facetCount = resultFacet.getCount();
    for (ResultFacetItem resultFacetItem : resultFacet.getFacetItems()) {
        Object facetItemValue = resultFacetItem.getValue();
        long facetItemCount = resultFacetItem.getCount();
    }
}

Learn more

Integrate in your project

Your application can be easily be enhanced with our library or acceleration server.

Easy Integration for Java based Projects

Add the library to your project and start coding. Focus on your index and field definitions. The picturesafe-search API hides the details you don't care about.

@Autowired
private SingleIndexElasticsearchService service;

private void createIndex() {
    service.createIndexWithAlias();
}

private void deleteIndex() {
    service.deleteIndexWithAlias();
}

REST API for non java projects and/or Webapplications

With the help of our Acceleration Server, that provides REST APIs for all operations, non-Java based projects get access to the solution. Just start Elasticsearch and the Acceleration Server and try it out.

The Acceleration Server will be available as SaaS on AWS soon, so you can reduce your efforts even more. Let us provide the infrastructure for you!

curl -g -H "Content-Type: application/json"
     -X POST localhost:8080/api/v1/search/my-index -d '{
"query": {
  "queryType": "FULLTEXT",
  "value": "test"
},
"maxResults": 10000,
"pageIndex": 1,
"pageSize": 10,
"sortOptions": [
  {
    "attribute": "id",
    "direction": "DESC"
  }
],
"aggregations": [
  {
    "aggregationType": "DEFAULT",
    "field": "city"
  }
]
}'

Graphical user interface with a lot of out-of-the-box functionalities

In addition to the REST API, our Acceleration Server offers a graphical user interface with many functions for index management and for the analysis of executed REST calls, like search requests.

picturesafe-search-enterprise-app

Build your own application

Choose your Integration Path

Open-Source Library

A simple but extensible Java API supports you to integrate Elasticsearch based searches in your projects fast and easily.

Commercial Library

Upgrade to commercial support and additional features not available in the open source version. Learn more!

Commercial Server

Be more efficient. By simple integrating our REST APIs, the Acceleration Server adds additional features and building blocks you don't have to implement yourself - concentrate on your business needs and use the server on-premise.

Coming soon! check later for our SaaS (Software as a Service) offering.

Compare picturesafe-search offerings