Ah, multi-threaded highlighting.  I implemented that once as a precursor to
ultimately other better things -- the UnifiedHighlighter.

Your ExecutorService ought to be a field on the handler.  In inform() you
can call SolrCore.addCloseHook to ensure this executor is shut down.

I suggest looking at this presentation from a few years ago I did with
Bloomberg at Lucene/Solr Revolution:
https://www.youtube.com/watch?v=tv5qKDKW8kk&t=14s
The UnifiedHighlighter is not enabled by default.  See the documentation:
https://builds.apache.org/job/Solr-reference-guide-master/javadoc/highlighting.html

Still... there is perhaps some value in multi-threading the highlighting
for huge docs, but I think we ultimately found no need after re-engineering
the highlighter.

~ David Smiley
Apache Lucene/Solr Search Developer
http://www.linkedin.com/in/davidwsmiley


On Wed, Aug 28, 2019 at 10:36 AM SOLR4189 <klin892...@yandex.ru> wrote:

> Hi all.
>
> In our team we thought about some tricky solution for queries with long
> time
> highlighting. For example, highlighting that takes more than 25 seconds.
> So,
> we created our component that wraps highlighting component of SOLR in this
> way:
>
> public void inform(SolrCore core) {
>     . . . .
>     subSearchComponent = core.getSearchComponent("highlight");
>     . . . .
> }
>
> public void process(ResponseBuilder rb) throws Exception {
>     long timeout = 25000;
>     ExecutorService exec = null:
>     try {
>         exec = Executors.newSingleThreadExecutor();
>         Future<IOException> future = exec.submit(() -> {
>             try {
>                 subSearchComponent.process(rb);
>             } catch (IOException e) {
>                 return e;
>             }
>             return null;
>         });
>         Exception ex = future.get(timeout, TimeUnit.MILLISECONDS);
>         if (ex != null) {
>             throw ex;
>         }
>     } catch ( TimeoutException toe) {
>         . . . .
>     } catch (Exception e) {
>        throw new IOException(e);
>     } finally {
>         if (exec != null) {
>             exec.shutdownNow();
>         }
>     }
> }
>
> This solution works, but sometime we see that searchers stay open and as a
> result our RAM usage is pretty high (like a memory leak of
> SolrIndexSearcher
> objects). And only after a SOLR service restart they disappear.
>
> What do you think about this solution?
> Maybe exists some built-in function for it?
>
>
>
> --
> Sent from: https://lucene.472066.n3.nabble.com/Solr-User-f472068.html
>

Reply via email to