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

Christopher Morris commented on LUCENE-1292:
--------------------------------------------

Not sure I understand the question. There is no database or in-memory data.

There are three indexes: the static index (s), the pseudo index (p), and the 
tag index (t). The index p doesn't exist - it is spoofed from t. The user view 
is of a ParallelReader wrapping s and p.

Example:

Populate index s with four documents. It is a requirement that the documents 
have a primary key field (a field known to contain a unique integer). The PKs 
for these documents are 1,2,3,and 4; ascending order from the document with 
docID 0.

The user tags documents with PK 1, 3, 4 with the Term("tag","foo").

The index p looks like:

Document 0
==========
tag : foo

Document 2
==========
tag : foo

Document 3
==========
tag : foo

The index t looks like the following (where {n} means the term is stored as 
occuring at term position 'n'; the term position is (ab)used here to store the 
primary key for use by p.termDocs()) :

Document: 0
==========
tag : foo_ADD{1}, foo_ADD{3}, foo_ADD{4}
PK_tag : 1_foo,3_foo,4_foo

The user now deletes the Term("tag", "foo") from the PK 3.

The index p looks like:

Document 0
==========
tag : foo

Document 3
==========
tag : foo

The index t looks like the following:

Document: 0
==========
tag : foo_ADD{1}, foo_ADD{3}, foo_ADD{4}
PK_tag : 1_foo,3_foo,4_foo

Document: 0
==========
tag : foo_DEL{3}
PK_tag : 3_foo

The method p.docFreq(new Term("tag", "foo")) runs the following block of code 
(removed some fail-fast tests and tidy up code for clarity):

int docFreq = 0;
TermDocs additions = t.termDocs(new Term("tag","foo_ADD")); // A TermDocs with 
one doc. The doc has a freq() of 3.
while (additions.next()) // true; once
{
  docFreq += additions.freq(); // +3
}
deletions = t.termDocs(new Term("tag","foo_DEL")); // A TermDocs with one doc. 
The doc has a freq() of 1.
while(deletions.next()) // true; once
{
  docFreq -= additions.freq(); // -1
}
return docFreq; // 2

I'd hoped to have test results for very dynamic terms, but I forgot to check 
that the server had any disk space available before I started the test.

> Tag Index
> ---------
>
>                 Key: LUCENE-1292
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1292
>             Project: Lucene - Java
>          Issue Type: New Feature
>          Components: Index
>    Affects Versions: 2.3.1
>            Reporter: Jason Rutherglen
>         Attachments: lucene-1292.patch
>
>
> The problem the tag index solves is slow field cache loading and range 
> queries, and reindexing an entire document to update fields that are not 
> tokenized.  
> The tag index holds untokenized terms with a docfreq of 1 in a term 
> dictionary like index file.  The file also stores the docs per term, similar 
> to LUCENE-1278.  The index also has a transaction log and in memory index for 
> realtime updates to the tags.  The transaction log is periodically merged 
> into the existing tag term dictionary index file.
> The TagIndexReader extends IndexReader and is unified with a regular index by 
> ParallelReader.  There is a doc id to terms skip pointer file for the 
> IndexReader.document method.  This file contains a pointer for looking up the 
> terms for a document.  
> There is a higher level class that encapsulates writing a document with tag 
> fields to IndexWriter and TagIndexWriter.  This requires a hook into 
> IndexWriter to coordinate doc ids and flushing segments to disk.  
> The writer class could be as simple as:
> {code}
> public class TagIndexWriter {
>   
>   public void add(Term term, DocIdSetIterator iterator) {
>   }
>   
>   public void delete(Term term, DocIdSetIterator iterator) {
>   }
> }
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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

Reply via email to