Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 30th, 2012  |  syntax: None  |  size: 2.98 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Is it possible to do a date based query time boost in Compass?
  2. DefaultCompassQuery query = (DefaultCompassQuery) compassBuilderQuery.toQuery();
  3.             query.setTypes( types.toArray( new Class[types.size()] ) );
  4.             LuceneSearchEngineQuery searchEngineQuery = (LuceneSearchEngineQuery) query.getSearchEngineQuery();
  5.             final SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmss" );
  6.             final long timeInMillis = Calendar.getInstance().getTimeInMillis();
  7.             ValueSourceQuery valSrcQuery = new ValueSourceQuery( new ValueSource() {
  8.  
  9.                 private static final long serialVersionUID = 1L;
  10.  
  11.                 @Override
  12.                 public int hashCode() {
  13.                     return System.identityHashCode( this );
  14.                 }
  15.  
  16.                 @Override
  17.                 public DocValues getValues( final IndexReader reader ) throws IOException {
  18.                     return new DocValues() {
  19.  
  20.                         @Override
  21.                         public float floatVal( int doc ) {
  22.                             try {
  23.                                 Document document = reader.document( doc );
  24.                                 Field field = document.getField( "date" );
  25.                                 if (null != field) {
  26.                                     Date parse = sdf.parse( field.stringValue() );
  27.  
  28.                                     long t = timeInMillis - parse.getTime();
  29.  
  30.                                     float f = (1.0f / (t * (1.0f / TimeUnit.DAYS.toMillis( 30 )) + 1.0f));
  31.                                     if (logger.isDebugEnabled()) {
  32.                                         logger.debug( "Date match: " + parse.toString() );
  33.                                         logger.debug( "Calculated date boost as: " + f + " for doc id: " + doc );
  34.                                     }
  35.                                     return f;
  36.                                 }
  37.                             } catch (CorruptIndexException e) {
  38.                                 e.printStackTrace();
  39.                             } catch (IOException e) {
  40.                                 e.printStackTrace();
  41.                             } catch (ParseException e) {
  42.                                 e.printStackTrace();
  43.                             }
  44.                             return 1.0f;
  45.                         }
  46.  
  47.                         @Override
  48.                         public String toString( int doc ) {
  49.                             return description() + "=" + strVal( doc );
  50.                         }
  51.  
  52.                     };
  53.                 }
  54.  
  55.                 @Override
  56.                 public boolean equals( Object o ) {
  57.                     return this == o;
  58.                 }
  59.  
  60.                 @Override
  61.                 public String description() {
  62.                     return "[boost: date]";
  63.                 }
  64.             } );
  65.             CustomScoreQuery sq = new CustomScoreQuery( searchEngineQuery.getQuery(), valSrcQuery );
  66.             searchEngineQuery.setQuery( sq );