lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Caroline Jen <jiapei_...@yahoo.com>
Subject Re: Rephrase My Question - How To Search Database With More Than One Pair of Property/Value as Parameters Using Lucene?
Date Thu, 06 Nov 2003 05:52:42 GMT
Hi, Victor:

Thank you very much for your explanation of Lucene.  I
think you understand what kind of search that I expect
Lucene to do.

I have data tables created in the MySQL database.

creator            title                category  
     
Elizabeth Castro   J2EE                computer
science
Isobelle Carmody   Obernewtyn          fiction
Victor Hugo        Les Miserables      literature
...
...
...

All records are indexed using an IndexWriter (see the
code at the end of this message). 

I have a sample program that takes care of the search
based on "one single pair of property and value" in
the database.  For example, visitors of the web site
can retrieve all articles written by Elizabeth Castro.
 "creator" is the property and "Elizabeth Castro" is
the value and they constitute one single pair of
property and value.  The method signature of the
search is:

findByProperty(this,property,value);

What is the method signature in Lucene if I want to
search the database based on "two pairs of property
and value"?  For example, I want to retrieve all
articles written by Elizabeth Castro in the "computer
science" category?

Am I on the right track?  Does my question make sense?

-Caroline

====================================================
    public static final void index (
            Integer article,
            Timestamp contributed,
            String contributor,
            String creator,
            String title,
            String journal_category,
            String content,
            IndexWriter writer) throws
ResourceException {

        try {

            Document document = new Document();

               
document.add(Field.Keyword(Tokens.ARTICLE,
                    article.toString()));

                document.add(Field.Text(Tokens.TITLE,
                    Engine.blankNull(title)));

               
document.add(Field.Text(Tokens.CONTRIBUTED_DISPLAY,
                   
Engine.blankNull(contributed.toString())));

               
document.add(Field.UnStored(Tokens.CONTRIBUTOR,
                    Engine.blankNull(contributor)));

               
document.add(Field.UnStored(Tokens.CREATOR,
                    Engine.blankNull(creator)));

               
document.add(Field.UnStored(Tokens.JOURNAL_CATEGORY,
                   
Engine.blankNull(journal_category)));

               
document.add(Field.UnStored(Tokens.CONTENT,
                    Engine.blankNull(content)));

            writer.addDocument(document);

        }
        catch (IOException e) {
            throw new ResourceException(e);
        }

    } // end index

    public static final void index (
            boolean create,
            Integer article,
            Timestamp contributed,
            String contributor,
            String creator,
            String title,
            String journal_category,
            String content) throws ResourceException {

        IndexWriter writer = null;

        try {
            // delete old index entry if this is an
update
            if (!create) indexDeleteArticle(article);
            // get the writer, index the entry,
optimize ...
            writer = Engine.getIndexWriter(false);
            index(
                article,
                contributed,
                contributor,
                creator,
                title,
                journal_category,
                content,
                writer);
            writer.optimize();
        }
        catch (IOException e) {
            throw new ResourceException(e);
        }
        // and close the writer
        finally {
            try {
                if (writer!=null) writer.close();
            }
            catch (IOException e) {
                // do nothing
            }
        }
    } // end index 


--- Victor Hadianto <vichad@hadianto.net> wrote:
> Lucene is a metadata based search engine. When you
> create 'Lucene document'
> you create the metadata with the associated value.
> 
> For example
> 
> Document doc = new Document();
> doc.Add(Field.Text("author", "Isobelle Carmody "));
> doc.Add(Field.Text("category", "fiction"));
> doc.Add(Field.Text("title", "Obernewtyn"));
> 
> And thus when you search Lucene you search based on
> the fields. For example
> if you want to search the author carmody within the
> category fiction you
> would do:
> 
> author:carmody AND category:fiction
> 
> This will return all documents that has the metadata
> author:carmody within
> the category:fiction (or the other way around
> doesn't really matter).
> 
> HTH,
> 
> /victor
> 
> 
> 
> ----- Original Message ----- 
> From: "Caroline Jen" <jiapei_jen@yahoo.com>
> To: "Lucene Users List"
> <lucene-user@jakarta.apache.org>
> Sent: Tuesday, November 04, 2003 2:26 PM
> Subject: Re: Rephrase My Question - How To Search
> Database With More Than
> One Pair of Property/Value as Parameters Using
> Lucene?
> 
> 
> > Thank you for your reply.  I am afraid that I was
> not
> > clear enough about what I have been doing.
> >
> > All the articles in the database can be searched
> by
> > either author; or title; or content; or id; or
> > category.
> >
> > If visitor of the web site selects to search by
> author
> > (then, "author" is highlighted in the drop-down
> list),
> > the visitor must fill out the name of the author
> in
> > the text field.  As such, author and the name of
> the
> > author is a property/value pair.  "author"
> corresponds
> > to property, and the name of the author provided
> > corresponds to value.  This part of the search is
> > OKay.  I have handled it.
> >
> > My problem is that there is one more dimension
> > involed.  The propery of this additional dimension
> is
> > "category" and the value of this dimension is
> supplied
> > by the application developer; for example,
> HISTORY.
> >
> > My question is how to search articles by author
> (or
> > title) with his/her name (or the title of the
> article)
> > provide within the field name in the database that
> is
> > "category" and its value is HISTORY?
> >
> > How do I use analyser(), getHits(), getQuery() in
> > Lucene in this kind of situation?  It is really
> the
> > first time I use Lucene.
> >
> > Thanks a lot in advance.
> >
> > -Caroline
> > --- Victor Hadianto <vichad@hadianto.net> wrote:
> > > Something like this?
> > >
> > > Query query = QueryParser.parse("\"Victor Hugo\"
> > > title:Miserables",
> > > "author", new StandardAnalyser();
> > >
> > > or
> > >
> > > Query query = QueryParser.parse("\"Victor Hugo\"
> > > title:Miserables
> > > category:history", "author", new
> StandardAnalyser();
> > >
> > > /victor
> > >
> > > ----- Original Message ----- 
> > > From: "Caroline Jen" <jiapei_jen@yahoo.com>
> > > To: <lucene-user@jakarta.apache.org>
> > > Sent: Tuesday, November 04, 2003 1:52 PM
> > > Subject: Rephrase My Question - How To Search
> > > Database With More Than One
> > > Pair of Property/Value as Parameters Using
> Lucene?
> > >
> > >
> > > > I raised the question two days ago.  My
> question
> > > was
> > > > too specific to the application that I have
> been
> > > > working on. I have decided to re-phrase my
> > > question.
> > > >
> > > >      People say that Lucene is very flexible. 
> I
> > > > wonder if there is a method signature that
> would
> > > be
> > > > suitable to my needs.  Or there are way to go
> > > about
> > > > it.
> > > >
> > > >      I am using lucene as the searching enging
> to
> > > look
> > > > for articles that are stores in the database.
> > > > It is OKay to search articles in the database
> > > using
> > > > "only one" pair of property/value as
> parameters in
> > > a
> > > > method; for example:
> > > >
> > > > ********Property***************Value
> > > >
> > > > *********author************Victor Hugo or
> .....
> > > > *********title*************Les Miserables or
> .....
> > > > ********content***************whatever .....
> > > > **********id*********************168
> > > >
> > > > visitors of the web site queries all articles
> in
> > > the
> > > > database by selecting 'author' as the property
> and
> > > > supply the name of the author (xyz) as value.
> > > >
> > > > I am stuck because I need to pass additonal
> > > parameters
> > > > rather than using one pair of property/value
> as
> > > > parameters -- I have this field "category" in
> my
> > > > database. I want to search and get all the
> > > articles
> > > > written by author(property) with name xyz
> (value)
> > > > within; say, the HISTORY category. The value
> of
> > > the
> > > > category will be supplied by the application
> > > developer
> > > > (NOT BY THE VISITOR of the web site via
> selecting
> > > from
> > > > a drop-down list and fill out the value in the
> > > text
> > > > field).
> > > >
> > > > Is there a method signature available in
> Lucene to
> > > > pass additional parameter as necessary? If
> not,
> > > how
> > > > does Lucene handle this kind of situation. 
> Thanks
> > > in
> > > > advance.
> > > >
> > > >
> > > >
> > > > __________________________________
> > > > Do you Yahoo!?
> > > > Protect your identity with Yahoo! Mail
> > > AddressGuard
> > > > http://antispam.yahoo.com/whatsnewfree
> > > >
> > > >
> > >
> >
>
---------------------------------------------------------------------
> 
=== message truncated ===


__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree

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


Mime
View raw message