You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by lingaraju <li...@infactindia.com> on 2004/07/26 11:37:55 UTC

updating the index created for database search

Dear  All

I need  help  to  update the index created for the database search

I created the index with  three field  mapping to the three column of database(oid(primarykey),title, contents)
Then I created the document for each row and added to the writer      

    doc.add(Field.Keyword("OID",oid+""));
    doc.add(Field.Text("title",title));
    doc.add(Field.Text("contents",contents));
    writer.addDocument(doc);

Here search is only on  title and the contents and oid is the key to retrieve the details from the database.

Later if the "contents" column in the database is  updated. We have to updated the content in the index also

If I use the writer with false

IndexWriter writer = new IndexWriter("C\index", new StandardAnalyzer(),false);

then all the record are inserted in to index without deleting the old index causing duplication 


If I use the writer with true

IndexWriter writer = new IndexWriter("C\index", new StandardAnalyzer(),false);

then record are inserted in to index deleting all the old index.

My question is 
1) How to update the existing index 
2) When I fetch the rows from the database in order to update or insert in index how to know which record is modified in database and which record is not present is index

Thanks is advance
Raju

Re: updating the index created for database search

Posted by lingaraju <li...@infactindia.com>.
I tried but I am missing some thing
Please can you tell me the syntax how to use the TermQuery to check the
presence of document in index from key field say OID

----- Original Message ----- 
From: "Daniel Naber" <da...@t-online.de>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Monday, July 26, 2004 5:21 PM
Subject: Re: updating the index created for database search


> On Monday 26 July 2004 13:31, lingaraju wrote:
>
> > If it is new record  through which class we have to check that record is
> > present in the index
>
> Just search for the id with a TermQuery. If you get a hit, the record is
in
> the index already.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: lucene-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: lucene-user-help@jakarta.apache.org
>
>


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


Re: updating the index created for database search

Posted by lingaraju <li...@infactindia.com>.
Dear Daniel

Thakns
Secod part is ok  What about the first part I mean "how to know how many
records are modified"

Regards
Raju

----- Original Message ----- 
From: "Daniel Naber" <da...@t-online.de>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Monday, July 26, 2004 5:21 PM
Subject: Re: updating the index created for database search


> On Monday 26 July 2004 13:31, lingaraju wrote:
>
> > If it is new record  through which class we have to check that record is
> > present in the index
>
> Just search for the id with a TermQuery. If you get a hit, the record is
in
> the index already.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: lucene-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: lucene-user-help@jakarta.apache.org
>
>


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


Re: updating the index created for database search

Posted by Daniel Naber <da...@t-online.de>.
On Monday 26 July 2004 13:31, lingaraju wrote:

> If it is new record  through which class we have to check that record is
> present in the index

Just search for the id with a TermQuery. If you get a hit, the record is in 
the index already.


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


Re: updating the index created for database search

Posted by lingaraju <li...@infactindia.com>.
Dear Daniel

Thanks a lot.
I do have the last-modified column in my database.
But how to know how many records are modified.
If it is new record  through which class we have to check that record is
present in the index
In the mean time I will look into IndexHTML in lucene demo

Regards
Raju

----- Original Message ----- 
From: "Daniel Naber" <da...@intrafind.de>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Monday, July 26, 2004 3:35 PM
Subject: Re: updating the index created for database search


> On Monday 26 July 2004 11:37, lingaraju wrote:
>
> > 2) When I fetch the rows from the database in order to update or insert
in
> > index how to know which record is modified in database and which record
is
> > not present is index
>
> Your database will need a "last modified" column. Then you can select
those
> rows that have been modified since the last update and for each row check
if
> it's in the Lucene index. If it is, delete it there and re-add the new
> version. If it's not, add it. To delete documents you will probably need
to
> iterate over all your IDs in the Lucene index and check if they are still
in
> the database. If that's too inefficient you could check if you can do it
the
> way the file system indexer (IndexHTML in Lucene's demo) does it.
>
> BTW, please don't cross-post to both lists.
>
> Regards
>  Daniel
>
> -- 
> Daniel Naber, IntraFind Software AG, Tel. 089-8906 9700
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: lucene-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: lucene-user-help@jakarta.apache.org
>
>


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


Re: updating the index created for database search

Posted by Daniel Naber <da...@intrafind.de>.
On Monday 26 July 2004 11:37, lingaraju wrote:

> 2) When I fetch the rows from the database in order to update or insert in
> index how to know which record is modified in database and which record is
> not present is index

Your database will need a "last modified" column. Then you can select those 
rows that have been modified since the last update and for each row check if 
it's in the Lucene index. If it is, delete it there and re-add the new 
version. If it's not, add it. To delete documents you will probably need to 
iterate over all your IDs in the Lucene index and check if they are still in 
the database. If that's too inefficient you could check if you can do it the 
way the file system indexer (IndexHTML in Lucene's demo) does it.

BTW, please don't cross-post to both lists.

Regards
 Daniel
 
-- 
Daniel Naber, IntraFind Software AG, Tel. 089-8906 9700


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


Re: updating the index created for database search

Posted by Stephane James Vaucher <va...@cirano.qc.ca>.
Firstly, please do not double-post, other comments inline:

On Mon, 26 Jul 2004, lingaraju wrote:

> Dear  All
> 
> I need  help  to  update the index created for the database search
> 
> I created the index with  three field  mapping to the three column of database(oid(primarykey),title, contents)
> Then I created the document for each row and added to the writer      
> 
>     doc.add(Field.Keyword("OID",oid+""));
>     doc.add(Field.Text("title",title));
>     doc.add(Field.Text("contents",contents));
>     writer.addDocument(doc);
> 
> Here search is only on  title and the contents and oid is the key to retrieve the details from the database.
> 
> Later if the "contents" column in the database is  updated. We have to updated the content in the index also
> 
> If I use the writer with false
> 
> IndexWriter writer = new IndexWriter("C\index", new StandardAnalyzer(),false);
> 
> then all the record are inserted in to index without deleting the old index causing duplication

It's a question of efficiency. The procedure for doing updates is 
described here:

http://wiki.apache.org/jakarta-lucene/UpdatingAnIndex

In a nutshell, it's up to you to decide when a record is modified and 
needs to be removed, then readded (there is no update)

> If I use the writer with true
> 
> IndexWriter writer = new IndexWriter("C\index", new StandardAnalyzer(),false);
> 
> then record are inserted in to index deleting all the old index.
> 
> My question is 
> 1) How to update the existing index 
> 2) When I fetch the rows from the database in order to update or insert in index how to know which record is modified in database and which record is not present is index
> 
> Thanks is advance
> Raju
> 

sv


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