This is a source code that shows the problem I am talking about.
In this example a new analyzer is made that outputs all words to the
same position (all but the first one are positionIncrement=0).
To get the problem I am talking about uncomment the only commented line.
//----------------------------------------------------------------
public class TestPhraseQuery {

        public static void main(String[] args) {
                try {
                        Directory ramDirectory = new RAMDirectory();
                        IndexWriter indexWriter = new IndexWriter(ramDirectory, 
new
TestAnalyzer(),true);
                        Document testDocument = new Document();
                        testDocument.add(Field.Text("line","hello all of you"));
                        indexWriter.addDocument(testDocument);
                        indexWriter.close();
                        
                        IndexSearcher indexSearcher = new 
IndexSearcher(ramDirectory);
                        PhraseQuery query = new PhraseQuery();
                        query.add(new Term("line","hello"),1);
                        query.add(new Term("line","all"),1);
//                      query.add(new Term("line","huullo"),1);
                        
                        Hits hits = indexSearcher.search(query);
                        System.out.println(hits.length());
                } catch (IOException e) {
                        e.printStackTrace();
                }
                
        }

}

class TestAnalyzer extends StandardAnalyzer {
        @Override
        public TokenStream tokenStream(String fieldName, Reader reader) {
                TokenStream result = super.tokenStream(fieldName, reader);
                result = new TestFilter(result);
                return result;
        }
}

class TestFilter extends TokenFilter {
        boolean first = true;
        public TestFilter(TokenStream input) {
                super(input);
        }
        @Override
        public Token next() throws IOException {
                Token token = input.next();
                if (token == null)
                        return null;
                if (!first) {
                        token.setPositionIncrement(0);
                }
                first = false;
                return token;
        }
}
//--------------------------------------------------------------------------

On 11/4/05, Erik Hatcher <[EMAIL PROTECTED]> wrote:
>
> On 4 Nov 2005, at 13:45, Daniel Naber wrote:
>
> > On Freitag 04 November 2005 11:33, Erik Hatcher wrote:
> >
> >
> >>> This should have been fixed one year ago with Daniel and myself.
> >>>
> >>
> >> Really?  It works in this OR kind of fashion with tokens in 0-
> >> incremented positions?
> >>
> >
> > Yes, this test case shows it (multi will be turned into multi and
> > multi2,
> > both at the same position by the analyzer used here):
> >
> > assertEquals("+(multi multi2) +foo", qp.parse("multi foo").toString
> > ());
>
> Thanks.  Sorry, I meant to send an immediate follow-up to my own
> silly question.  I knew better as soon as I hit send.
>
>     Erik
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


--
regards,
Ahmed Saad

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to