[ 
https://issues.apache.org/jira/browse/LUCENE-3892?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13247175#comment-13247175
 ] 

Han Jiang edited comment on LUCENE-3892 at 4/5/12 12:20 PM:
------------------------------------------------------------

Hi Mike,
I have changed my proposal a bit, but here are some questions here:

{quote}
* There are actually more than 2 codecs (eg we also have Lucene3x,
SimpleText, sep/intblock (abstract), random codecs/postings
formats for testing...), but our default codec now is Lucene40.
{quote}

Yes, but it seems that our baseline will be Lucene40 and Pulsing? Lucene3x is 
read-only, and other approaches are not productive.
And, what is random codec? Does it mean to randomly pick up a codec for user?

{quote}
* I think you can use the existing abstract sep/intblock classes
(ie, they implement layers like FieldsProducer/Consumer...), and
then you can "just" implement the required methods (eg to
encode/decode one int[] block).
{quote}

And this was my initial thought about the PForDelta interface:

The class hierarchy will be as below (quite similar to pulsing):
* PForDeltaPostingsFormat(extends PostingsFormat): 
        It will define global behaviors such as file suffix, and provide 
customized FieldsWriter/Reader
* PForDeltaFieldsWriter(extends FieldsConsumer): 
        It will define how terms,docids,freq,offset are written into posting 
files.
        inner classes include: 
** PForDeltaTermsConsumer(extends TermsConsumer)
** PForDeltaPostingsConsumer(extends PostingsConsumer)
* PForDeltaFieldsReader(extends FieldsProducer):
        It will define how postings are read from index, and provide *Enum 
class to iterate docids, freqs etc.
        inner classes include:
** PForDeltaFieldsEnum(extends FieldsEnum)
** PForDeltaTermsEnum(extends TermsEnum)
** PForDeltaDocsEnum(extends DocsEnum)
** PForDeltaDocsAndPositonsEnum(extends DocsAndPostionsEnum)
** PForDeltaTerms(extends Terms)

It seems that "BlockTermsReader/Writer" have already implement those 
subclasses, and we can just pass our Postings(Writer/Reader)Base as an 
argument, like PatchedFrameOfRefCodec::fieldsConsumer() does.
Then, to introduce PForDeltaCodec into trunk, we should also introduce the 
"fixed codec"? Also, why isn't lucene40codec implemented with this line? 

{quote}
* We may need to tune the skipper settings, based on profiling
results from skip-intensive (Phrase, And) queries... since it's
currently geared towards single-doc-at-once encoding. I don't think
we should try to make a new skipper impl here... (there is a separate
issue for that).
{quote}

It seems that skip settings are not so related to backend codec? Do you mean 
the nocommit line in FixedPostingsWriterImpl.java:117 ?

{quote}
* Maybe explore the combination of pulsing and PForDelta codecs;
seems like the combination of those two could be important, since
for low docFreq terms, retrieving the docs is now more
expensive...
{quote}

Yes, it seems that if PForDelta outperforms current approaches, a Pulsing 
version will work better. This feature will also come as "phase 2".
                
      was (Author: billy):
    Hi Mike,
I have changed my proposal a bit, but here are some questions here:

{quote}
* There are actually more than 2 codecs (eg we also have Lucene3x,
SimpleText, sep/intblock (abstract), random codecs/postings
formats for testing...), but our default codec now is Lucene40.
{quote}

Yes, but it seems that our baseline will be Lucene40 and Pulsing? Lucene3x is 
read-only, and other approaches are not productive.
And, what is random codec? Does it mean to randomly pick up a codec for user?

{quote}
* I think you can use the existing abstract sep/intblock classes
(ie, they implement layers like FieldsProducer/Consumer...), and
then you can "just" implement the required methods (eg to
encode/decode one int[] block).
{quote}

And this was my initial thought about the PForDelta interface:

The class hierarchy will be as below (quite similar to pulsing):
* PForDeltaPostingsFormat(extends PostingsFormat): 
        It will define global behaviors such as file suffix, and provide 
customized FieldsWriter/Reader
* PForDeltaFieldsWriter(extends FieldsConsumer): 
        It will define how terms,docids,freq,offset are written into posting 
files.
        inner classes include: 
** PForDeltaTermsConsumer(extends TermsConsumer)
** PForDeltaPostingsConsumer(extends PostingsConsumer)
* PForDeltaFieldsReader(extends FieldsProducer):
        It will define how postings are read from index, and provide *Enum 
class to iterate docids, freqs etc.
        inner classes include:
** PForDeltaFieldsEnum(extends FieldsEnum)
** PForDeltaTermsEnum(extends TermsEnum)
** PForDeltaDocsEnum(extends DocsEnum)
** PForDeltaDocsAndPositonsEnum(extends DocsAndPostionsEnum)
** PForDeltaTerms(extends Terms)

It seems that "BlockTermsReader/Writer" have already implement those 
subclasses, and we can just pass our Postings(Writer/Reader)Base as an 
argument, like PatchedFrameOfRefCodec::fieldsConsumer() does.
Then, to introduce PForDeltaCodec into trunk, we should also introduce the 
"fixed codec"? Also, why isn't lucene40codec implemented with this line? 

{quote}
* We may need to tune the skipper settings, based on profiling
results from skip-intensive (Phrase, And) queries... since it's
currently geared towards single-doc-at-once encoding. I don't think
we should try to make a new skipper impl here... (there is a separate
issue for that).
{quote}

I haven't investigated much about different kinds of queries. What are skipper 
settings? 

{quote}
* Maybe explore the combination of pulsing and PForDelta codecs;
seems like the combination of those two could be important, since
for low docFreq terms, retrieving the docs is now more
expensive...
{quote}

Yes, it seems that if PForDelta outperforms current approaches, a Pulsing 
version will work better. This feature will also come as "phase 2".
                  
> Add a useful intblock postings format (eg, FOR, PFOR, PFORDelta, 
> Simple9/16/64, etc.)
> -------------------------------------------------------------------------------------
>
>                 Key: LUCENE-3892
>                 URL: https://issues.apache.org/jira/browse/LUCENE-3892
>             Project: Lucene - Java
>          Issue Type: Improvement
>            Reporter: Michael McCandless
>              Labels: gsoc2012, lucene-gsoc-12
>             Fix For: 4.0
>
>
> On the flex branch we explored a number of possible intblock
> encodings, but for whatever reason never brought them to completion.
> There are still a number of issues opened with patches in different
> states.
> Initial results (based on prototype) were excellent (see
> http://blog.mikemccandless.com/2010/08/lucene-performance-with-pfordelta-codec.html
> ).
> I think this would make a good GSoC project.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to