The user list is the appropriate spot, but this brings up a discussion point.

The "norms" will require 1 byte per document, so you will need at least 512 M for the heap.

Start the java process with -Xmx512m and see what happens.

Depending on what you are doing you might be able to "omit the norms", but this really doesn't save any memory, BUT...

Maybe Lucene should be changed to not create the 'fake norms' array, and instead if if the norms() returned null, then don't dereference the norm value, but use

DefaultSimilarity.encodeNorm(1.0f)

in 'real time'. (This is what our branch does). The memory savings is huge for a large index, and many Lucene applications do not need the norms (thus the 'omit norms' option).

This would require changes to all of the calls to norms() - about 25 instances, and some scorer code (since it derefernces the norms directly).

The simplest solution would be to change

byte[] norms()

to

int norm(int doc)
{
        final int defaultnorm = DefaultSimilarity.encodeNorm(1.0f);

if(norms==null)
        return defaultnorm;
else
        return norms[doc]

}

The trivial method will be inlined, so the performance hit would be negligible. Then all users of the norms array would be changed to norm (doc).

On Nov 13, 2007, at 6:39 AM, Grant Ingersoll (JIRA) wrote:


[ https://issues.apache.org/jira/browse/LUCENE-1053? page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Grant Ingersoll resolved LUCENE-1053.
-------------------------------------

       Resolution: Invalid
    Lucene Fields:   (was: [New])

Hi Lars,

Generally we recommend you open discussion of issues you are having with your applications use of Lucene by asking questions on the java-user mailing list. What you are reporting doesn't necessarily sound like a bug in Lucene, so let's discuss it on java-user first and hopefully we can get you some answers there first.

Start by posting what you have here, plus add in what your heap settings are, etc. Lucene doesn't scale infinitely (nor does any search application or, for that matter, program), when you reach a certain index size, you will have to start doing things like distributed search whereby you split your index across 2 or more machines. You _MAY_ have hit those limits and may need to distribute your search.

Cheers,
Grant

OutOfMemoryError on search in large, simple index
-------------------------------------------------

                Key: LUCENE-1053
URL: https://issues.apache.org/jira/browse/ LUCENE-1053
            Project: Lucene - Java
         Issue Type: Bug
         Components: Search
   Affects Versions: 2.0.0
Environment: Red Hat Enterprise Linux ES release 3 (Taroon Update 9) Linux sb-test-acs-001 2.4.21-47.0.1.ELsmp #1 SMP Fri Oct 13 17:56:20 EDT 2006 i686 i686 i386 GNU/Linux
2 GB RAM
Java version 1.5.0_13
           Reporter: Lars Clausen

We get OutOfMemoryError when performing a one-term search in our index. The search, if completed, should give only a few thousand hits, but from inspecting a heap dump it appears that many more documents in the index get stored in Lucene during the search. Our index consists of eight fields per document, fairly regularly sized, the total index size is 170GB, spread over about 400 million documents (425 bytes per document). The search is a simple TermQuery, the search term a trivial string, the code in question looks like this (cut together for conciseness):
        public static final String FIELD_URL = "url";
...
luceneSearcher = new IndexSearcher(indexDir.getAbsolutePath ()); Query query = new TermQuery(new Term (DigestIndexer.FIELD_URL, uri));
        try {
            Hits hits = luceneSearcher.search(query);
Stack trace:
Oct 11, 2007 4:02:19 PM org.slf4j.impl.JCLLoggerAdapter error
SEVERE: EXCEPTION
java.lang.OutOfMemoryError: Java heap space
at org.apache.lucene.index.SegmentReader.getNorms (SegmentReader.java:384) at org.apache.lucene.index.SegmentReader.norms (SegmentReader.java:393) at org.apache.lucene.search.TermQuery$TermWeight.scorer (TermQuery.java:68) at org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:129) at org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:99)
        at org.apache.lucene.search.Hits.getMoreDocs(Hits.java:65)
        at org.apache.lucene.search.Hits.(Hits.java:44)
        at org.apache.lucene.search.Searcher.search(Searcher.java:44)
        at org.apache.lucene.search.Searcher.search(Searcher.java:36)
at dk.netarkivet.common.distribute.arcrepository.ARCLookup.luceneLookup( ARCLookup.java:166) at dk.netarkivet.common.distribute.arcrepository.ARCLookup.lookup (ARCLookup.java:130) at dk.netarkivet.viewerproxy.ARCArchiveAccess.lookup (ARCArchiveAccess.java:126) at dk.netarkivet.viewerproxy.NotifyingURIResolver.lookup (NotifyingURIResolver.java:72) at dk.netarkivet.viewerproxy.CommandResolver.lookup (CommandResolver.java:80) at dk.netarkivet.viewerproxy.CommandResolver.lookup (CommandResolver.java:80) at dk.netarkivet.viewerproxy.CommandResolver.lookup (CommandResolver.java:80) at dk.netarkivet.viewerproxy.WebProxy.handle(WebProxy.java: 129) at org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:285)
at org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:457) at org.mortbay.jetty.HttpConnection $RequestHandler.headerComplete(HttpConnection.java:751) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java: 500) at org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:209) at org.mortbay.jetty.HttpConnection.handle (HttpConnection.java:357) at org.mortbay.jetty.bio.SocketConnector$Connection.run (SocketConnector.java:217) at org.mortbay.thread.BoundedThreadPool$PoolThread.run (BoundedThreadPool.java:475)

--
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