Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Blur Wiki" for change 
notification.

The "BlurPlatform" page has been changed by TimWilliams:
https://wiki.apache.org/blur/BlurPlatform

Comment:
 

New page:
== Overview ==
This describes a proposal for creating from Apache Blur a distributed 
search/indexing platform on which Blur "classic" could be implemented.  

In modern open source search platforms, we find Lucene at the very core and a 
monolithic application stack implemented on top of it handling the distributed 
indexing, searching, failures, features, etc.  We suppose here that it would be 
helpful if an intermediate abstraction could be introduced providing the 
primitives for a distributed Lucene server on which specific search 
applications could be built. This document describes an approach for separating 
those concerns in Blur and re-implementing Blur classic on top of this new 
platform.


== Motivation ==
We have a nice, incredibly scalable, search system why such a big change?  It's 
a fair question, here are some thoughts:

 * To allow for indexing/searching based on other/new data models (e.g. more 
than just the Row/Record constructs).
 * Allow implementations to build whole new APIs given direct access to the 
Lucene primitives.
 * Allows flexibility to build totally custom applications.

== Approach ==
The key to the approach is building a command execution framework, then 
transition the implementation of the Thrift server classes to utilize that 
framework.  For example, the IndexServer might transition to be able to run 
generic IndexCommand's across its shards.  This framework may provide:
 * Command preemption.
 * Command cancelling.
 * Full status information.
 * Distributed traceability.
 * Metering, time/memory/etc

This would allow someone to implement new features on top of the platform by 
implementing some sort of Command class, something like (should be read as 
pseudo-code really):

 {{{
  public abstract class IndexCommand<T> {
    private String _table;
  
    public abstract <T> T process(BlurIndex index);
    public abstract void merge(T partial);
    public abstract IndexResponse<T> terminate();
  
    public String getTable() {
      return _table;
    }
  }
  }}}

The point is that as a command implementor, you process a BlurIndex (which 
gives you full access to IndexReader/Searcher/Writers); define how results 
should be merged together; and how they should finally be returned.

Reply via email to