2010-04-14 3 views
2

При поиске, есть ли способ отключить подсчет очков для любого запроса?Отключение подсчета очков в Lucene (.NET)

Сценарий заключается в том, что пользователь уточняет свой запрос, используя разные комбинации слов, фраз и т. Д., И нуждается в ответах в реальном времени (ну, достаточно быстро), на количество обращений.

Время поиска замедляет работу, когда есть миллионы ударов из-за подсчета очков, но пользователю действительно не нужны все эти документы. Как только он увидит, что есть 1M + хиты, он начнет добавлять дополнительные слова к запросу. Опция «Сортировать по релевантности» позволила бы ему сделать это быстро, в то время как снова забив, когда количество обращений будет разумным.

Возможно ли это?

Я использую Lucene.NET 2.9.2, но AFAIK идентичен версии Java.

ответ

0

В Lucene 2.9 вы можете использовать пользовательский коллекционер, который может делать то, что вы хотите (получать хиты без забивания).

http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc/all/org/apache/lucene/search/Collector.html

+0

Благодарим за информацию. Я попытался создать NullCollector (ничего не делает), и он действительно работает. К сожалению, время поиска такое же, как у сборщика по умолчанию. Время не потрачено в сборщике, оно проводится в TermScorer, который по-прежнему вызывает мой NullCollector для каждого документа в результирующем наборе. – Rabbit

+0

Это меня не удивляет. Чтобы найти # документа для запроса, Lucene должна выполнить работу по поиску документов, соответствующих условиям. Если производительность в реальном времени действительно важна для вас, возможно, обратите внимание на разделение индексов и поиск их параллельно. – bajafresh4life

4

Попробуйте ConstantScoreQuery. Это возвращает только хиты, не забирая их.

+0

Это работает .. и это самое простое решение. – Jagadesh

Смежные вопросы