|
List Info
Thread: Created: (LUCENE-1019) CustomScoreQuery should support multiple ValueSourceQueries
|
|
| Created: (LUCENE-1019) CustomScoreQuery
should support multiple
ValueSourceQueries |
  United States |
2007-10-04 20:06:50 |
CustomScoreQuery should support multiple ValueSourceQueries
-----------------------------------------------------------
Key: LUCENE-1019
URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
Project: Lucene - Java
Issue Type: Improvement
Components: Search
Affects Versions: 2.2
Reporter: Kyle Maxwell
CustomScoreQuery's constructor currently accepts a subQuery,
and a ValueSourceQuery. I would like it to accept multiple
ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
This patch implements CustomMultiScoreQuery with my desired
functionality, and refactors CustomScoreQuery to implement
the special case of a CustomMultiScoreQuery with 0 or 1
ValueSourceQueries. This keeps the CustomScoreQuery API
intact.
This patch includes basic tests, more or less taken from the
original implementation, and customized a bit to cover the
new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
| Issue Comment Edited: (LUCENE-1019)
CustomScoreQuery should support multiple
ValueSourceQueri |
  United States |
2007-10-04 20:08:50 |
[ https://issues.apache.org/jira/browse
/LUCENE-1019?page=com.atlassian.jira.plugin.system.issuetabp
anels:comment-tabpanel#action_12532557 ]
fizx edited comment on LUCENE-1019 at 10/4/07 6:08 PM:
------------------------------------------------------------
---
Here's the patch! BTW, I'll edit the docs as soon as
someone signs off that this is a good idea!
was (Author: fizx):
Here's the patch!
> CustomScoreQuery should support multiple
ValueSourceQueries
>
-----------------------------------------------------------
>
> Key: LUCENE-1019
> URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Search
> Affects Versions: 2.2
> Reporter: Kyle Maxwell
> Attachments: CustomMultiQuery.v0.diff
>
>
> CustomScoreQuery's constructor currently accepts a
subQuery, and a ValueSourceQuery. I would like it to accept
multiple ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
> This patch implements CustomMultiScoreQuery with my
desired functionality, and refactors CustomScoreQuery to
implement the special case of a CustomMultiScoreQuery with 0
or 1 ValueSourceQueries. This keeps the CustomScoreQuery
API intact.
> This patch includes basic tests, more or less taken
from the original implementation, and customized a bit to
cover the new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
| Updated: (LUCENE-1019) CustomScoreQuery
should support multiple
ValueSourceQueries |
  United States |
2007-10-04 20:08:50 |
[ https://issues.apache.org/jira/browse/LUCENE-1019?page=co
m.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
a> ]
Kyle Maxwell updated LUCENE-1019:
---------------------------------
Attachment: CustomMultiQuery.v0.diff
Here's the patch!
> CustomScoreQuery should support multiple
ValueSourceQueries
>
-----------------------------------------------------------
>
> Key: LUCENE-1019
> URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Search
> Affects Versions: 2.2
> Reporter: Kyle Maxwell
> Attachments: CustomMultiQuery.v0.diff
>
>
> CustomScoreQuery's constructor currently accepts a
subQuery, and a ValueSourceQuery. I would like it to accept
multiple ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
> This patch implements CustomMultiScoreQuery with my
desired functionality, and refactors CustomScoreQuery to
implement the special case of a CustomMultiScoreQuery with 0
or 1 ValueSourceQueries. This keeps the CustomScoreQuery
API intact.
> This patch includes basic tests, more or less taken
from the original implementation, and customized a bit to
cover the new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
| Commented: (LUCENE-1019)
CustomScoreQuery should support multiple
ValueSourceQueries |
  United States |
2007-10-04 20:50:50 |
[ https://issues.apache.org/jira/browse
/LUCENE-1019?page=com.atlassian.jira.plugin.system.issuetabp
anels:comment-tabpanel#action_12532560 ]
Hoss Man commented on LUCENE-1019:
----------------------------------
this class seems to assume that the ValueSourceQueries
should be multipled ... but it would be just as easy to
assume the should be added, or averaged.
It seems like it might make more sense if instead of a
CustomMultiScoreQuery there was just a
"ProductValueSource" class that took in a
ValueSource[] and multiplied them
> CustomScoreQuery should support multiple
ValueSourceQueries
>
-----------------------------------------------------------
>
> Key: LUCENE-1019
> URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Search
> Affects Versions: 2.2
> Reporter: Kyle Maxwell
> Attachments: CustomMultiQuery.v0.diff
>
>
> CustomScoreQuery's constructor currently accepts a
subQuery, and a ValueSourceQuery. I would like it to accept
multiple ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
> This patch implements CustomMultiScoreQuery with my
desired functionality, and refactors CustomScoreQuery to
implement the special case of a CustomMultiScoreQuery with 0
or 1 ValueSourceQueries. This keeps the CustomScoreQuery
API intact.
> This patch includes basic tests, more or less taken
from the original implementation, and customized a bit to
cover the new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
| Updated: (LUCENE-1019) CustomScoreQuery
should support multiple
ValueSourceQueries |
  United States |
2007-10-05 17:34:50 |
[ https://issues.apache.org/jira/browse/LUCENE-1019?page=co
m.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
a> ]
Kyle Maxwell updated LUCENE-1019:
---------------------------------
Attachment: CustomScoreQuery.v1.diff
Here's a slightly simpler version of the diff (v1).
The default behavior of CustomScoreQuery with multiple
ValueSourceQueries does not matter to me. I really want to
be able to override it with custom logic. Also note that
multiplying twice is currently as simple as
CustomScoreQuery(CustomScoreQuery(subQuery, value1),
value2). But what about things that aren't linear
combinations?
Use case: I want the score to fall off exponentially as
content ages, with a decay rate that varies on a per
document basis.
Each document has three fields: "text,"
"created-at," and "half-life."
Created-at is represented as a UNIX timestamp, and half-life
in seconds. I'm not sure that the following query is able
to be expressed as nested queries. There may be another way
to do this, but this seems simple and elegant to me.
{code:java}
public class DateDecayQuery extends CustomScoreQuery {
public final double LOG2 = Math.log(2);
private long now;
public DateDecayQuery(Query subQuery) {
super(subQuery, new ValueSourceQuery[] {
new FieldScoreQuery("date", Type.INT),
new FieldScoreQuery("half-life", Type.INT)
});
now = new Date().getTime() / 1000; // UNIX timestamp;
setStrict(true);
}
public float customScore(int doc, float score, float
fields[]) {
float date = fields[0];
float halfLife = fields[1];
float dateScore = (float) Math.exp(LOG2 * (date - now) /
halfLife);
return score * dateScore;
}
}
> CustomScoreQuery should support multiple
ValueSourceQueries
>
-----------------------------------------------------------
>
> Key: LUCENE-1019
> URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Search
> Affects Versions: 2.2
> Reporter: Kyle Maxwell
> Attachments: CustomMultiQuery.v0.diff,
CustomScoreQuery.v1.diff
>
>
> CustomScoreQuery's constructor currently accepts a
subQuery, and a ValueSourceQuery. I would like it to accept
multiple ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
> This patch implements CustomMultiScoreQuery with my
desired functionality, and refactors CustomScoreQuery to
implement the special case of a CustomMultiScoreQuery with 0
or 1 ValueSourceQueries. This keeps the CustomScoreQuery
API intact.
> This patch includes basic tests, more or less taken
from the original implementation, and customized a bit to
cover the new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
| Issue Comment Edited: (LUCENE-1019)
CustomScoreQuery should support multiple
ValueSourceQueri |
  United States |
2007-10-05 17:36:50 |
[ https://issues.apache.org/jira/browse
/LUCENE-1019?page=com.atlassian.jira.plugin.system.issuetabp
anels:comment-tabpanel#action_12532789 ]
fizx edited comment on LUCENE-1019 at 10/5/07 3:36 PM:
------------------------------------------------------------
---
Here's a slightly simpler version of the diff (v1).
The default behavior of CustomScoreQuery with multiple
ValueSourceQueries does not matter to me. I really want to
be able to override it with custom logic. Also note that
multiplying twice is currently as simple as
CustomScoreQuery(CustomScoreQuery(subQuery, value1),
value2). But what about things that aren't linear
combinations?
Use case: I want the score to fall off exponentially as
content ages, with a decay rate that varies on a per
document basis.
Each document has three fields: "text,"
"created-at," and "half-life."
Created-at is represented as a UNIX timestamp, and half-life
in seconds. I'm not sure that the following query is able
to be expressed as nested queries. There may be another way
to do this, but this seems simple and elegant to me.
{code:java}
public class DateDecayQuery extends CustomScoreQuery {
public final double LOG2 = Math.log(2);
private long now;
public DateDecayQuery(Query subQuery) {
super(subQuery, new ValueSourceQuery[] {
new FieldScoreQuery("created-at", Type.INT),
new FieldScoreQuery("half-life", Type.INT)
});
now = new Date().getTime() / 1000; // UNIX timestamp;
setStrict(true);
}
public float customScore(int doc, float score, float
fields[]) {
float date = fields[0];
float halfLife = fields[1];
float dateScore = (float) Math.exp(LOG2 * (date - now) /
halfLife);
return score * dateScore;
}
}
was (Author: fizx):
Here's a slightly simpler version of the diff (v1).
The default behavior of CustomScoreQuery with multiple
ValueSourceQueries does not matter to me. I really want to
be able to override it with custom logic. Also note that
multiplying twice is currently as simple as
CustomScoreQuery(CustomScoreQuery(subQuery, value1),
value2). But what about things that aren't linear
combinations?
Use case: I want the score to fall off exponentially as
content ages, with a decay rate that varies on a per
document basis.
Each document has three fields: "text,"
"created-at," and "half-life."
Created-at is represented as a UNIX timestamp, and half-life
in seconds. I'm not sure that the following query is able
to be expressed as nested queries. There may be another way
to do this, but this seems simple and elegant to me.
{code:java}
public class DateDecayQuery extends CustomScoreQuery {
public final double LOG2 = Math.log(2);
private long now;
public DateDecayQuery(Query subQuery) {
super(subQuery, new ValueSourceQuery[] {
new FieldScoreQuery("date", Type.INT),
new FieldScoreQuery("half-life", Type.INT)
});
now = new Date().getTime() / 1000; // UNIX timestamp;
setStrict(true);
}
public float customScore(int doc, float score, float
fields[]) {
float date = fields[0];
float halfLife = fields[1];
float dateScore = (float) Math.exp(LOG2 * (date - now) /
halfLife);
return score * dateScore;
}
}
> CustomScoreQuery should support multiple
ValueSourceQueries
>
-----------------------------------------------------------
>
> Key: LUCENE-1019
> URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Search
> Affects Versions: 2.2
> Reporter: Kyle Maxwell
> Attachments: CustomMultiQuery.v0.diff,
CustomScoreQuery.v1.diff
>
>
> CustomScoreQuery's constructor currently accepts a
subQuery, and a ValueSourceQuery. I would like it to accept
multiple ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
> This patch implements CustomMultiScoreQuery with my
desired functionality, and refactors CustomScoreQuery to
implement the special case of a CustomMultiScoreQuery with 0
or 1 ValueSourceQueries. This keeps the CustomScoreQuery
API intact.
> This patch includes basic tests, more or less taken
from the original implementation, and customized a bit to
cover the new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
| Commented: (LUCENE-1019)
CustomScoreQuery should support multiple
ValueSourceQueries |
  United States |
2007-10-11 08:42:50 |
[ https://issues.apache.org/jira/browse
/LUCENE-1019?page=com.atlassian.jira.plugin.system.issuetabp
anels:comment-tabpanel#action_12534038 ]
Doron Cohen commented on LUCENE-1019:
-------------------------------------
You could put this logic in your implementation of
ValueSource,
possibly constructed over multiple FieldCacheSources -
{code:title=DateDecayQuery over multiple value sources}
public class DateDecayQuery extends CustomScoreQuery {
public DateDecayQuery(Query subQuery) {
super(subQuery, createValSrceQuery());
setStrict(true);
}
private static ValueSourceQuery createValSrceQuery() {
return new ValueSourceQuery(new HalfLifeValSrc());
}
private static class HalfLifeValSrc extends ValueSource {
final ValueSource createdAt = new
IntFieldSource("created-at");
final ValueSource halfLife = new
IntFieldSource("half-life");
final long now = new Date().getTime() / 1000; // UNIX
timestamp;
final double LOG2 = Math.log(2);
public DocValues getValues(final IndexReader reader)
throws IOException {
final DocValues valsCreated =
createdAt.getValues(reader);
final DocValues valsHalfLife =
halfLife.getValues(reader);
return new DocValues(reader.maxDoc()) {
public float floatVal(int doc) {
float vCreated = valsCreated.floatVal(doc);
float vHalfLife = valsHalfLife.floatVal(doc);
return (float) Math.exp(LOG2 * (vCreated - now) /
vHalfLife);
}
};
}
}
}
Though usage is much simpler if this is added to the query.
> CustomScoreQuery should support multiple
ValueSourceQueries
>
-----------------------------------------------------------
>
> Key: LUCENE-1019
> URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Search
> Affects Versions: 2.2
> Reporter: Kyle Maxwell
> Attachments: CustomMultiQuery.v0.diff,
CustomScoreQuery.v1.diff
>
>
> CustomScoreQuery's constructor currently accepts a
subQuery, and a ValueSourceQuery. I would like it to accept
multiple ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
> This patch implements CustomMultiScoreQuery with my
desired functionality, and refactors CustomScoreQuery to
implement the special case of a CustomMultiScoreQuery with 0
or 1 ValueSourceQueries. This keeps the CustomScoreQuery
API intact.
> This patch includes basic tests, more or less taken
from the original implementation, and customized a bit to
cover the new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
| Closed: (LUCENE-1019) CustomScoreQuery
should support multiple
ValueSourceQueries |
  United States |
2007-11-06 17:28:51 |
[ https://issues.apache.org/jira/browse/LUCENE-1019?page=co
m.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
a> ]
Kyle Maxwell closed LUCENE-1019.
--------------------------------
Resolution: Invalid
Lucene Fields: (was: [Patch Available, New])
Ok, I'm satisfied with Doron's solution. It'd be nice to
see something like this in some documentation, somewhere.
The wiki is prolly appropriate.
> CustomScoreQuery should support multiple
ValueSourceQueries
>
-----------------------------------------------------------
>
> Key: LUCENE-1019
> URL: htt
ps://issues.apache.org/jira/browse/LUCENE-1019
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Search
> Affects Versions: 2.2
> Reporter: Kyle Maxwell
> Attachments: CustomMultiQuery.v0.diff,
CustomScoreQuery.v1.diff
>
>
> CustomScoreQuery's constructor currently accepts a
subQuery, and a ValueSourceQuery. I would like it to accept
multiple ValueSourceQueries. The workaround of nested
CustomScoreQueries works for simple cases, but it quickly
becomes either cumbersome to manage, or impossible to
implement the desired function.
> This patch implements CustomMultiScoreQuery with my
desired functionality, and refactors CustomScoreQuery to
implement the special case of a CustomMultiScoreQuery with 0
or 1 ValueSourceQueries. This keeps the CustomScoreQuery
API intact.
> This patch includes basic tests, more or less taken
from the original implementation, and customized a bit to
cover the new cases.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue
online.
------------------------------------------------------------
---------
To unsubscribe, e-mail: java-dev-unsubscribe lucene.apache.org
For additional commands, e-mail: java-dev-help lucene.apache.org
|
|
[1-8]
|
|