FAQ
Hi,
I know that there are many topics about scoring issues, but I didn't find an
answer in the topics.
This is the problem :
Imagine I'm a teacher, and I have to index all the results, comments and
score about students.

Student :
String name (eg : John Smith)
String comments : (eg: John is a good student, but he needs to be more self
confident bla bla bla)
float score (eg : 98)

I have to index all the students and when I use the search class, I want to
get first the best students. So, if John Smith is a better student than John
Mickael, when I search "John" I want to have John Smith BEFORE John Mickeal.

To do that, I'm using BooleanQuery to search in name and comment fields.

First, I thought I could use the function Document.setBoost(float boost)
while indexing student, with boost = Student.score. But the result was not
what I was expected, it didn't work correctly.

Then I thought I could use a FunctionQuery to search :
FunctionQuery functionQuery = new FunctionQuery(new
ReverseOrdFieldSource("score"));
But the result was still incorrect.

I don't know what I'm doing wrong. Could you help me to find a solution ?
Thank you :)
--
View this message in context: http://old.nabble.com/Boost-Problem-%28again%29%2C-need-example-%21-tp27684388p27684388.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org

Search Discussions

  • Ian Lea at Feb 22, 2010 at 9:33 am
    Can't you simply sort by descending score (your score, not lucene's)?
    Seems to me that would give you what you are asking for.

    The setBoost() method is unlikely to work consistently because it only
    infuences the score rather than setting it. If your John Mickeal doc
    happens to have a higher lucene score, because of the normal
    idf/tf/etc stuff, then the setBoost() with a higher value for John
    Smith may well not be enough to force John Smith to the top.

    I don't know enough about function queries to help you much there but
    FieldScoreQuery might work. I can't see any sign of class
    FunctionQuery in the 3.0.0 core package so am not clear what that is.


    --
    Ian.


    On Mon, Feb 22, 2010 at 8:54 AM, pdaures wrote:

    Hi,
    I know that there are many topics about scoring issues, but I didn't find an
    answer in the topics.
    This is the problem :
    Imagine I'm a teacher, and I have to index all the results, comments and
    score about students.

    Student :
    String name (eg : John Smith)
    String comments : (eg: John is a good student, but he needs to be more self
    confident bla bla bla)
    float score (eg : 98)

    I have to index all the students and when I use the search class, I want to
    get first the best students. So, if John Smith is a better student than John
    Mickael, when I search "John" I want to have John Smith BEFORE John Mickeal.

    To do that, I'm using BooleanQuery to search in name and comment fields.

    First, I thought I could use the function Document.setBoost(float boost)
    while indexing student, with boost = Student.score. But the result was not
    what I was expected, it didn't work correctly.

    Then I thought I could use a FunctionQuery to search :
    FunctionQuery functionQuery = new FunctionQuery(new
    ReverseOrdFieldSource("score"));
    But the result was still incorrect.

    I don't know what I'm doing wrong. Could you help me to find a solution ?
    Thank you :)
    --
    View this message in context: http://old.nabble.com/Boost-Problem-%28again%29%2C-need-example-%21-tp27684388p27684388.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
  • Uwe Schindler at Feb 22, 2010 at 9:43 am
    It's CustomScoreQuery in 2.9 and 3.0.

    Please wait for 2.9.2 and 3.0.1 for an important API change in this experimental query type to work correct with the new per-segment-search! You can test the release artifacts of both new versions here: http://people.apache.org/~uschindler/staging-area/lucene-292-301-take2-rev912433/

    With e.g. ValueSourceQuery you can score your documents using a separate numeric field from your documents (it uses FieldCache).

    Uwe

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de
    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 10:33 AM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    Can't you simply sort by descending score (your score, not lucene's)?
    Seems to me that would give you what you are asking for.

    The setBoost() method is unlikely to work consistently because it only
    infuences the score rather than setting it. If your John Mickeal doc
    happens to have a higher lucene score, because of the normal
    idf/tf/etc stuff, then the setBoost() with a higher value for John
    Smith may well not be enough to force John Smith to the top.

    I don't know enough about function queries to help you much there but
    FieldScoreQuery might work. I can't see any sign of class
    FunctionQuery in the 3.0.0 core package so am not clear what that is.


    --
    Ian.


    On Mon, Feb 22, 2010 at 8:54 AM, pdaures wrote:

    Hi,
    I know that there are many topics about scoring issues, but I didn't find an
    answer in the topics.
    This is the problem :
    Imagine I'm a teacher, and I have to index all the results, comments and
    score about students.

    Student :
    String name (eg : John Smith)
    String comments : (eg: John is a good student, but he needs to be more self
    confident bla bla bla)
    float score (eg : 98)

    I have to index all the students and when I use the search class, I want to
    get first the best students. So, if John Smith is a better student than John
    Mickael, when I search "John" I want to have John Smith BEFORE John Mickeal.
    To do that, I'm using BooleanQuery to search in name and comment fields.
    First, I thought I could use the function Document.setBoost(float boost)
    while indexing student, with boost = Student.score. But the result was not
    what I was expected, it didn't work correctly.

    Then I thought I could use a FunctionQuery to search :
    FunctionQuery functionQuery = new FunctionQuery(new
    ReverseOrdFieldSource("score"));
    But the result was still incorrect.

    I don't know what I'm doing wrong. Could you help me to find a
    solution ?
    Thank you :)
    --
    View this message in context: http://old.nabble.com/Boost-Problem-
    %28again%29%2C-need-example-%21-tp27684388p27684388.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
  • Pdaures at Feb 22, 2010 at 11:01 am
    HI !
    Thank you for your help.
    I think I don't use CustomScoreQuery correctly when I do a "search".

    BooleanQuery combinedQuery = new BooleanQuery();
    combinedQuery.add(textQuery, Occur.MUST);
    combinedQuery.add(titleQuery, Occur.MUST);

    CustomScoreQuery customQuery = new CustomScoreQuery(combinedQuery,new
    FieldScoreQuery(BOOST_FIELD,Type.INT));

    indexSearcher.search(..., customQuery, ....).

    in order to index the BOOST_FIELD, I do that :
    Field boostField = new Field(BOOST_FIELD, Integer.toString(boost),
    Field.Store.YES, Field.Index.ANALYZED.NO);


    Is that correct ?
    Thank you




    Uwe Schindler wrote:
    It's CustomScoreQuery in 2.9 and 3.0.

    Please wait for 2.9.2 and 3.0.1 for an important API change in this
    experimental query type to work correct with the new per-segment-search!
    You can test the release artifacts of both new versions here:
    http://people.apache.org/~uschindler/staging-area/lucene-292-301-take2-rev912433/

    With e.g. ValueSourceQuery you can score your documents using a separate
    numeric field from your documents (it uses FieldCache).

    Uwe

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de
    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 10:33 AM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    Can't you simply sort by descending score (your score, not lucene's)?
    Seems to me that would give you what you are asking for.

    The setBoost() method is unlikely to work consistently because it only
    infuences the score rather than setting it. If your John Mickeal doc
    happens to have a higher lucene score, because of the normal
    idf/tf/etc stuff, then the setBoost() with a higher value for John
    Smith may well not be enough to force John Smith to the top.

    I don't know enough about function queries to help you much there but
    FieldScoreQuery might work. I can't see any sign of class
    FunctionQuery in the 3.0.0 core package so am not clear what that is.


    --
    Ian.



    On Mon, Feb 22, 2010 at 8:54 AM, pdaures <patrick.daures@gmail.com>
    wrote:
    Hi,
    I know that there are many topics about scoring issues, but I didn't find an
    answer in the topics.
    This is the problem :
    Imagine I'm a teacher, and I have to index all the results, comments and
    score about students.

    Student :
    String name (eg : John Smith)
    String comments : (eg: John is a good student, but he needs to be more self
    confident bla bla bla)
    float score (eg : 98)

    I have to index all the students and when I use the search class, I want to
    get first the best students. So, if John Smith is a better student than John
    Mickael, when I search "John" I want to have John Smith BEFORE John Mickeal.
    To do that, I'm using BooleanQuery to search in name and comment fields.
    First, I thought I could use the function Document.setBoost(float boost)
    while indexing student, with boost = Student.score. But the result was not
    what I was expected, it didn't work correctly.

    Then I thought I could use a FunctionQuery to search :
    FunctionQuery functionQuery = new FunctionQuery(new
    ReverseOrdFieldSource("score"));
    But the result was still incorrect.

    I don't know what I'm doing wrong. Could you help me to find a
    solution ?
    Thank you :)
    --
    View this message in context: http://old.nabble.com/Boost-Problem-
    %28again%29%2C-need-example-%21-tp27684388p27684388.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

    --
    View this message in context: http://old.nabble.com/Boost-Problem-%28again%29%2C-need-example-%21-tp27684388p27685594.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
  • Ian Lea at Feb 22, 2010 at 11:26 am
    boostField needs to be indexed to be used in the FieldScoreQuery.

    Are you now using one of the the latest releases that Uwe mentioned,
    with fixes for CustomScoreQuery?

    And unless you provide your own implementation of
    CustomScoreQuery.customScore() I think that you are still not
    guaranteed to get what you want since the default implementation is to
    calculate the score as subQueryScore * valSrcScore.


    --
    Ian.

    On Mon, Feb 22, 2010 at 11:00 AM, pdaures wrote:

    HI !
    Thank you for your help.
    I think I don't use CustomScoreQuery correctly when I do a "search".

    BooleanQuery combinedQuery = new BooleanQuery();
    combinedQuery.add(textQuery, Occur.MUST);
    combinedQuery.add(titleQuery, Occur.MUST);

    CustomScoreQuery customQuery = new CustomScoreQuery(combinedQuery,new
    FieldScoreQuery(BOOST_FIELD,Type.INT));

    indexSearcher.search(..., customQuery, ....).

    in order to index the BOOST_FIELD, I do that :
    Field boostField = new Field(BOOST_FIELD, Integer.toString(boost),
    Field.Store.YES, Field.Index.ANALYZED.NO);


    Is that correct ?
    Thank you




    Uwe Schindler wrote:
    It's CustomScoreQuery in 2.9 and 3.0.

    Please wait for 2.9.2 and 3.0.1 for an important API change in this
    experimental query type to work correct with the new per-segment-search!
    You can test the release artifacts of both new versions here:
    http://people.apache.org/~uschindler/staging-area/lucene-292-301-take2-rev912433/

    With e.g. ValueSourceQuery you can score your documents using a separate
    numeric field from your documents (it uses FieldCache).

    Uwe

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de
    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 10:33 AM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    Can't you simply sort by descending score (your score, not lucene's)?
    Seems to me that would give you what you are asking for.

    The setBoost() method is unlikely to work consistently because it only
    infuences the score rather than setting it.  If your John Mickeal doc
    happens to have a higher lucene score, because of the normal
    idf/tf/etc stuff, then the setBoost() with a higher value for John
    Smith may well not be enough to force John Smith to the top.

    I don't know enough about function queries to help you much there but
    FieldScoreQuery might work.  I can't see any sign of class
    FunctionQuery in the 3.0.0 core package so am not clear what that is.


    --
    Ian.



    On Mon, Feb 22, 2010 at 8:54 AM, pdaures <patrick.daures@gmail.com>
    wrote:
    Hi,
    I know that there are many topics about scoring issues, but I didn't find an
    answer in the topics.
    This is the problem :
    Imagine I'm a teacher, and I have to index all the results, comments and
    score about students.

    Student :
    String name (eg : John Smith)
    String comments : (eg: John is a good student, but he needs to be more self
    confident bla bla bla)
    float score (eg : 98)

    I have to index all the students and when I use the search class, I want to
    get first the best students. So, if John Smith is a better student than John
    Mickael, when I search "John" I want to have John Smith BEFORE John Mickeal.
    To do that, I'm using BooleanQuery to search in name and comment fields.
    First, I thought I could use the function Document.setBoost(float boost)
    while indexing student, with boost = Student.score. But the result was not
    what I was expected, it didn't work correctly.

    Then I thought I could use a FunctionQuery to search :
    FunctionQuery functionQuery = new FunctionQuery(new
    ReverseOrdFieldSource("score"));
    But the result was still incorrect.

    I don't know what I'm doing wrong. Could you help me to find a
    solution ?
    Thank you :)
    --
    View this message in context: http://old.nabble.com/Boost-Problem-
    %28again%29%2C-need-example-%21-tp27684388p27684388.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

    --
    View this message in context: http://old.nabble.com/Boost-Problem-%28again%29%2C-need-example-%21-tp27684388p27685594.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
  • Uwe Schindler at Feb 22, 2010 at 11:35 am
    The simple fix for that is to wrap the subQuery using: new ConstantScoreQuery(new QueryWrapperFilter(query)) - after that its score is constant and the ValueSource only scores.

    I recommend to use NumericField for indexing this boost (no storing needed, only indexing, precisionStep=Integer.MAX_VALUE). Else (if using standard Field) the boost field does not need to be "stored", it must be indexed as NOT_ANALYZED.

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de

    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 12:26 PM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    boostField needs to be indexed to be used in the FieldScoreQuery.

    Are you now using one of the the latest releases that Uwe mentioned,
    with fixes for CustomScoreQuery?

    And unless you provide your own implementation of
    CustomScoreQuery.customScore() I think that you are still not
    guaranteed to get what you want since the default implementation is to
    calculate the score as subQueryScore * valSrcScore.


    --
    Ian.

    On Mon, Feb 22, 2010 at 11:00 AM, pdaures wrote:

    HI !
    Thank you for your help.
    I think I don't use CustomScoreQuery correctly when I do a "search".

    BooleanQuery combinedQuery = new BooleanQuery();
    combinedQuery.add(textQuery, Occur.MUST);
    combinedQuery.add(titleQuery, Occur.MUST);

    CustomScoreQuery customQuery = new CustomScoreQuery(combinedQuery,new
    FieldScoreQuery(BOOST_FIELD,Type.INT));

    indexSearcher.search(..., customQuery, ....).

    in order to index the BOOST_FIELD, I do that :
    Field boostField = new Field(BOOST_FIELD, Integer.toString(boost),
    Field.Store.YES, Field.Index.ANALYZED.NO);


    Is that correct ?
    Thank you




    Uwe Schindler wrote:
    It's CustomScoreQuery in 2.9 and 3.0.

    Please wait for 2.9.2 and 3.0.1 for an important API change in this
    experimental query type to work correct with the new per-segment-
    search!
    You can test the release artifacts of both new versions here:
    http://people.apache.org/~uschindler/staging-area/lucene-292-301-
    take2-rev912433/
    With e.g. ValueSourceQuery you can score your documents using a
    separate
    numeric field from your documents (it uses FieldCache).

    Uwe

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de
    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 10:33 AM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    Can't you simply sort by descending score (your score, not
    lucene's)?
    Seems to me that would give you what you are asking for.

    The setBoost() method is unlikely to work consistently because it
    only
    infuences the score rather than setting it. If your John Mickeal
    doc
    happens to have a higher lucene score, because of the normal
    idf/tf/etc stuff, then the setBoost() with a higher value for John
    Smith may well not be enough to force John Smith to the top.

    I don't know enough about function queries to help you much there
    but
    FieldScoreQuery might work. I can't see any sign of class
    FunctionQuery in the 3.0.0 core package so am not clear what that
    is.

    --
    Ian.



    On Mon, Feb 22, 2010 at 8:54 AM, pdaures <patrick.daures@gmail.com>
    wrote:
    Hi,
    I know that there are many topics about scoring issues, but I
    didn't
    find an
    answer in the topics.
    This is the problem :
    Imagine I'm a teacher, and I have to index all the results,
    comments
    and
    score about students.

    Student :
    String name (eg : John Smith)
    String comments : (eg: John is a good student, but he needs to be more self
    confident bla bla bla)
    float score (eg : 98)

    I have to index all the students and when I use the search class,
    I
    want to
    get first the best students. So, if John Smith is a better
    student
    than John
    Mickael, when I search "John" I want to have John Smith BEFORE
    John
    Mickeal.
    To do that, I'm using BooleanQuery to search in name and comment fields.
    First, I thought I could use the function Document.setBoost(float boost)
    while indexing student, with boost = Student.score. But the
    result
    was not
    what I was expected, it didn't work correctly.

    Then I thought I could use a FunctionQuery to search :
    FunctionQuery functionQuery = new FunctionQuery(new
    ReverseOrdFieldSource("score"));
    But the result was still incorrect.

    I don't know what I'm doing wrong. Could you help me to find a
    solution ?
    Thank you :)
    --
    View this message in context: http://old.nabble.com/Boost-
    Problem-
    %28again%29%2C-need-example-%21-tp27684388p27684388.html
    Sent from the Lucene - Java Users mailing list archive at
    Nabble.com.

    -----------------------------------------------------------------
    ----
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    -------------------------------------------------------------------
    --
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    --------------------------------------------------------------------
    -
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

    --
    View this message in context: http://old.nabble.com/Boost-Problem-
    %28again%29%2C-need-example-%21-tp27684388p27685594.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
  • Pdaures at Feb 22, 2010 at 1:20 pm
    It WORKS !

    Thank you so much, I spent a lot of time trying to do that, thank you again
    !


    Uwe Schindler wrote:
    The simple fix for that is to wrap the subQuery using: new
    ConstantScoreQuery(new QueryWrapperFilter(query)) - after that its score
    is constant and the ValueSource only scores.

    I recommend to use NumericField for indexing this boost (no storing
    needed, only indexing, precisionStep=Integer.MAX_VALUE). Else (if using
    standard Field) the boost field does not need to be "stored", it must be
    indexed as NOT_ANALYZED.

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de

    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 12:26 PM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    boostField needs to be indexed to be used in the FieldScoreQuery.

    Are you now using one of the the latest releases that Uwe mentioned,
    with fixes for CustomScoreQuery?

    And unless you provide your own implementation of
    CustomScoreQuery.customScore() I think that you are still not
    guaranteed to get what you want since the default implementation is to
    calculate the score as subQueryScore * valSrcScore.


    --
    Ian.


    On Mon, Feb 22, 2010 at 11:00 AM, pdaures <patrick.daures@gmail.com>
    wrote:
    HI !
    Thank you for your help.
    I think I don't use CustomScoreQuery correctly when I do a "search".

    BooleanQuery combinedQuery = new BooleanQuery();
    combinedQuery.add(textQuery, Occur.MUST);
    combinedQuery.add(titleQuery, Occur.MUST);

    CustomScoreQuery customQuery = new CustomScoreQuery(combinedQuery,new
    FieldScoreQuery(BOOST_FIELD,Type.INT));

    indexSearcher.search(..., customQuery, ....).

    in order to index the BOOST_FIELD, I do that :
    Field boostField = new Field(BOOST_FIELD, Integer.toString(boost),
    Field.Store.YES, Field.Index.ANALYZED.NO);


    Is that correct ?
    Thank you




    Uwe Schindler wrote:
    It's CustomScoreQuery in 2.9 and 3.0.

    Please wait for 2.9.2 and 3.0.1 for an important API change in this
    experimental query type to work correct with the new per-segment-
    search!
    You can test the release artifacts of both new versions here:
    http://people.apache.org/~uschindler/staging-area/lucene-292-301-
    take2-rev912433/
    With e.g. ValueSourceQuery you can score your documents using a
    separate
    numeric field from your documents (it uses FieldCache).

    Uwe

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de
    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 10:33 AM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    Can't you simply sort by descending score (your score, not
    lucene's)?
    Seems to me that would give you what you are asking for.

    The setBoost() method is unlikely to work consistently because it
    only
    infuences the score rather than setting it. If your John Mickeal
    doc
    happens to have a higher lucene score, because of the normal
    idf/tf/etc stuff, then the setBoost() with a higher value for John
    Smith may well not be enough to force John Smith to the top.

    I don't know enough about function queries to help you much there
    but
    FieldScoreQuery might work. I can't see any sign of class
    FunctionQuery in the 3.0.0 core package so am not clear what that
    is.

    --
    Ian.



    On Mon, Feb 22, 2010 at 8:54 AM, pdaures <patrick.daures@gmail.com>
    wrote:
    Hi,
    I know that there are many topics about scoring issues, but I
    didn't
    find an
    answer in the topics.
    This is the problem :
    Imagine I'm a teacher, and I have to index all the results,
    comments
    and
    score about students.

    Student :
    String name (eg : John Smith)
    String comments : (eg: John is a good student, but he needs to be more self
    confident bla bla bla)
    float score (eg : 98)

    I have to index all the students and when I use the search class,
    I
    want to
    get first the best students. So, if John Smith is a better
    student
    than John
    Mickael, when I search "John" I want to have John Smith BEFORE
    John
    Mickeal.
    To do that, I'm using BooleanQuery to search in name and comment fields.
    First, I thought I could use the function Document.setBoost(float boost)
    while indexing student, with boost = Student.score. But the
    result
    was not
    what I was expected, it didn't work correctly.

    Then I thought I could use a FunctionQuery to search :
    FunctionQuery functionQuery = new FunctionQuery(new
    ReverseOrdFieldSource("score"));
    But the result was still incorrect.

    I don't know what I'm doing wrong. Could you help me to find a
    solution ?
    Thank you :)
    --
    View this message in context: http://old.nabble.com/Boost-
    Problem-
    %28again%29%2C-need-example-%21-tp27684388p27684388.html
    Sent from the Lucene - Java Users mailing list archive at
    Nabble.com.

    -----------------------------------------------------------------
    ----
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    -------------------------------------------------------------------
    --
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    --------------------------------------------------------------------
    -
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

    --
    View this message in context: http://old.nabble.com/Boost-Problem-
    %28again%29%2C-need-example-%21-tp27684388p27685594.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

    --
    View this message in context: http://old.nabble.com/Boost-Problem-%28again%29%2C-need-example-%21-tp27684388p27687065.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
  • Erick Erickson at Feb 22, 2010 at 2:08 pm
    I still don't understand why a simple sort as suggested by Ian wouldn't
    work.
    It'd be a lot more reliable than fiddling with doc scores if you want a
    strict
    ordering on a particular field (make sure it's untokenized though).

    Erick
    On Mon, Feb 22, 2010 at 8:19 AM, pdaures wrote:


    It WORKS !

    Thank you so much, I spent a lot of time trying to do that, thank you again
    !


    Uwe Schindler wrote:
    The simple fix for that is to wrap the subQuery using: new
    ConstantScoreQuery(new QueryWrapperFilter(query)) - after that its score
    is constant and the ValueSource only scores.

    I recommend to use NumericField for indexing this boost (no storing
    needed, only indexing, precisionStep=Integer.MAX_VALUE). Else (if using
    standard Field) the boost field does not need to be "stored", it must be
    indexed as NOT_ANALYZED.

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de

    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 12:26 PM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    boostField needs to be indexed to be used in the FieldScoreQuery.

    Are you now using one of the the latest releases that Uwe mentioned,
    with fixes for CustomScoreQuery?

    And unless you provide your own implementation of
    CustomScoreQuery.customScore() I think that you are still not
    guaranteed to get what you want since the default implementation is to
    calculate the score as subQueryScore * valSrcScore.


    --
    Ian.


    On Mon, Feb 22, 2010 at 11:00 AM, pdaures <patrick.daures@gmail.com>
    wrote:
    HI !
    Thank you for your help.
    I think I don't use CustomScoreQuery correctly when I do a "search".

    BooleanQuery combinedQuery = new BooleanQuery();
    combinedQuery.add(textQuery, Occur.MUST);
    combinedQuery.add(titleQuery, Occur.MUST);

    CustomScoreQuery customQuery = new CustomScoreQuery(combinedQuery,new
    FieldScoreQuery(BOOST_FIELD,Type.INT));

    indexSearcher.search(..., customQuery, ....).

    in order to index the BOOST_FIELD, I do that :
    Field boostField = new Field(BOOST_FIELD, Integer.toString(boost),
    Field.Store.YES, Field.Index.ANALYZED.NO);


    Is that correct ?
    Thank you




    Uwe Schindler wrote:
    It's CustomScoreQuery in 2.9 and 3.0.

    Please wait for 2.9.2 and 3.0.1 for an important API change in this
    experimental query type to work correct with the new per-segment-
    search!
    You can test the release artifacts of both new versions here:
    http://people.apache.org/~uschindler/staging-area/lucene-292-301-
    take2-rev912433/
    With e.g. ValueSourceQuery you can score your documents using a
    separate
    numeric field from your documents (it uses FieldCache).

    Uwe

    -----
    Uwe Schindler
    H.-H.-Meier-Allee 63, D-28213 Bremen
    http://www.thetaphi.de
    eMail: uwe@thetaphi.de
    -----Original Message-----
    From: Ian Lea
    Sent: Monday, February 22, 2010 10:33 AM
    To: java-user@lucene.apache.org
    Subject: Re: Boost Problem (again), need example !

    Can't you simply sort by descending score (your score, not
    lucene's)?
    Seems to me that would give you what you are asking for.

    The setBoost() method is unlikely to work consistently because it
    only
    infuences the score rather than setting it. If your John Mickeal
    doc
    happens to have a higher lucene score, because of the normal
    idf/tf/etc stuff, then the setBoost() with a higher value for John
    Smith may well not be enough to force John Smith to the top.

    I don't know enough about function queries to help you much there
    but
    FieldScoreQuery might work. I can't see any sign of class
    FunctionQuery in the 3.0.0 core package so am not clear what that
    is.

    --
    Ian.



    On Mon, Feb 22, 2010 at 8:54 AM, pdaures <patrick.daures@gmail.com>
    wrote:
    Hi,
    I know that there are many topics about scoring issues, but I
    didn't
    find an
    answer in the topics.
    This is the problem :
    Imagine I'm a teacher, and I have to index all the results,
    comments
    and
    score about students.

    Student :
    String name (eg : John Smith)
    String comments : (eg: John is a good student, but he needs to be more self
    confident bla bla bla)
    float score (eg : 98)

    I have to index all the students and when I use the search class,
    I
    want to
    get first the best students. So, if John Smith is a better
    student
    than John
    Mickael, when I search "John" I want to have John Smith BEFORE
    John
    Mickeal.
    To do that, I'm using BooleanQuery to search in name and comment fields.
    First, I thought I could use the function Document.setBoost(float boost)
    while indexing student, with boost = Student.score. But the
    result
    was not
    what I was expected, it didn't work correctly.

    Then I thought I could use a FunctionQuery to search :
    FunctionQuery functionQuery = new FunctionQuery(new
    ReverseOrdFieldSource("score"));
    But the result was still incorrect.

    I don't know what I'm doing wrong. Could you help me to find a
    solution ?
    Thank you :)
    --
    View this message in context: http://old.nabble.com/Boost-
    Problem-
    %28again%29%2C-need-example-%21-tp27684388p27684388.html
    Sent from the Lucene - Java Users mailing list archive at
    Nabble.com.

    -----------------------------------------------------------------
    ----
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    -------------------------------------------------------------------
    --
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    --------------------------------------------------------------------
    -
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

    --
    View this message in context: http://old.nabble.com/Boost-Problem-
    %28again%29%2C-need-example-%21-tp27684388p27685594.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org
    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

    --
    View this message in context:
    http://old.nabble.com/Boost-Problem-%28again%29%2C-need-example-%21-tp27684388p27687065.html
    Sent from the Lucene - Java Users mailing list archive at Nabble.com.


    ---------------------------------------------------------------------
    To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
    For additional commands, e-mail: java-user-help@lucene.apache.org

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupjava-user @
categorieslucene
postedFeb 22, '10 at 8:54a
activeFeb 22, '10 at 2:08p
posts8
users4
websitelucene.apache.org

People

Translate

site design / logo © 2022 Grokbase