Компас Lucene хиты - PullRequest
       19

Компас Lucene хиты

8 голосов
/ 15 ноября 2010

Я использую Lucene и Compass на нем, и у меня проблема:

          try {

       CompassHits hits = compassQuery.hits();
       for (CompassHit compassHit : hits) {
        if (results.size() >= maxResults) {
         Log.info(this, "Number of results exceeded %,d for query %s", maxResults, query);
         break;
        } else {

         results.add((T) compassHit.getData());
        }
       }


  } 

Когда данные поступают на compassHit.getData());, и это 100 попаданий, они повторно выполняют поиск, есть ли возможностьизменить его на 200 или более?

РЕДАКТИРОВАТЬ:

Из вики apache org:

"Итерация по всем попаданиям медленная по двум причинам. Во-первых, поиск ()метод, который возвращает объект Hits, повторно выполняет поиск внутри, когда вам нужно более 100 обращений ".

А у меня вопрос есть ли возможность изменить это значение "100" на "200"?но важно то, что я использую компас, а не сырой Lucene.

1 Ответ

2 голосов
/ 11 мая 2011

Я посмотрел на источник хитов в 2.9.2. Это жестко закодировано. Похоже, это жестко закодировано

 Hits(Searcher s, Query q, Filter f) throws IOException {
    this.weight = q.weight(s);
    this.searcher = s;
    this.filter = f;
    this.nDeletions = countDeletions(s);
    getMoreDocs(50);
    this.lengthAtStart = this.length;
  }

Если вы не используете Compass, вы можете следовать инструкциям в JavaDoc для хитов, в которых предлагается замена

Вместо е. г. TopDocCollector и TopDocs могут быть использованы:

  TopDocCollector collector = new TopDocCollector(hitsPerPage);
   searcher.search(query, collector);
   ScoreDoc[] hits = collector.topDocs().scoreDocs;
   for (int i = 0; i < hits.length; i++) {
     int docId = hits[i].doc;
     Document d = searcher.doc(docId);
     // do something with current hit
     ...

Но так как вы, если вы не хотите переписать часть Компаса, я думаю, что вы застряли

...