lucenenet-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <alex.david...@bluewire-technologies.com>
Subject RE: Weighting results by 'freshness'
Date Wed, 05 Apr 2017 22:26:01 GMT
Hi Michael,

I’d do it by storing the datestamp as a numeric field at the desired resolution, and then
writing a scorer which calculates ‘age’ of a document (‘now’ minus the datestamp)
and *reducing* the document’s score (multiply by weighting less than 1) based on that. Something
like (x/(x+age))^n should work, with x and n adjustable for the desired falloff characteristics.

Mapping DateTimeOffset->integer in a stable fashion is usually awkward because future calendar
changes can break stored data, but since we’re only dealing with past dates here it should
be simple. You could probably get away with using Ticks, which is at least evenly distributed
across past times.

Alex Davidson
Bluewire Technologies

From: Michael Newton
Sent: 05 April 2017 18:39
To: user@lucenenet.apache.org
Subject: Weighting results by 'freshness'

Hi,
I've managed to build a nice little Lucene.net back end with 4.0.8 and the
free text side of things is working really well. However, I'd like to add a
weighting to the queries supplied that means that newer documents are
considered more highly (but not to outright sort by date).

I have a "created" field on all of my documents, which has been populated
using "DateTools.DateToString" with a resolution of day, but I'm uncertain
how to add a query which add weight to results based on "the higher the
value of field 'x', the better".

What would be the best way to go about this?

My current query code (in F#) looks like this:

    let parser =
        QueryParsers.Classic.MultiFieldQueryParser
            (Util.LuceneVersion.LUCENE_48, [| "title"; "content" |],
             context.Analyzer)
    let query = parser.Parse phrase

Many thanks,

Michael


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message