Interestingly, you have extra spaces when you construct your queries, e.g.
queries[2]= " accountmanagement" has an extra space at the beginning but
when you index the document, there are no spaces. I believe that since
you're indexing the fields UN_TOKENIZED, that the spaces are preserved in
the query (but I'm not entirely clear on this point, so don't take my word
for it completely <G>).

Have you used Luke to examine your index? You can also put parsed form of
the query into Luke and play around with that to see what *should* work.
Google lucene luke and you'll find it right away.

Best
Erick

On 9/12/06, Pramodh Shenoy <[EMAIL PROTECTED]> wrote:

Hi Eric/Usergroup,

    I am working on a help content index-search project based on Lucene.
One of my requirements is to search for a particular text in the content
of files from specific directories. When I index the content



Eg. guides/accountmanagement/index.htm and
guides/databasemanagement/index.htm



doc.add(new Field("booktype", "guides", Field.Store.YES,
Field.Index.UN_TOKENIZED))

doc.add(new Field("subtype", "accountmanagement", Field.Store.YES,
Field.Index.UN_TOKENIZED))

doc.add(new Field("subtype", "databasemanagement", Field.Store.YES,
Field.Index.UN_TOKENIZED))

doc.add(new Field("content",
all-content-read-from-html-body-as-a-string, Field.Store.NO,
Field.Index.TOKENIZED))



Now I want to search for all occurrences of "management" in the
"content" field (which already exists in both the above index.htm files
body), in files under subtype/accountmanagement and under subtype/
databasemanagement



Iam creating the query as below:



        String [] queries = new String [3];// =new String[4]

        String [] fields = new String [3] ];// =new String[4]

        BooleanClause.Occur[] flags = new BooleanClause.Occur[3] ];//
=new String[4]



        queries[0]= " guides ";

        fields[0]=" booktype ";

        flags[0] = BooleanClause.Occur.MUST;



        queries[1]= " management ";

        fields[1]="content";

        flags[1] = BooleanClause.Occur.MUST;



        /* ######## A ####### */

        queries[2]= " accountmanagement databasemanagement ";

        fields[2]=" subtype ";

        flags[2] = BooleanClause.Occur.MUST;



        /* ##### B #######

        queries[2]= " accountmanagement";

        fields[2]="subtype";

        flags[2] = BooleanClause.Occur.MUST;



        queries[3]= " databasemanagement ";

        fields[3]=" subtype ";

        flags[3] = BooleanClause.Occur.MUST;

        */



        Query queryObj = null;

        //parse the query string

        try {

            queryObj = MultiFieldQueryParser.parse(queries, fields,
flags, new StandardAnalyzer());

        } catch (ParseException exp) { }





With option A , the query generated looks like:

+booktype:guides +content:management +(subtype: accountmanagement
subtype: databasemanagement)



With option B , the query generated looks like:

+booktype:guides +content:management +subtype: accountmanagement
+subtype: databasemanagement





Both return no Hits.!



Any idea how I should create the query. In Lucene In Action, this is
explained as "you can group field selection over several terms using
field:(a b c)". How can I achieve this with the code above ?



Thanks

Pramodh











Reply via email to