2010-07-19 2 views
0

У меня есть приложение, которое хранит (название, тело) новости как отдельное поле в документе lucene. Во время поиска мне нужно создать запрос, который увеличивает название над телом. (название важнее в поиске), но это замедляет скорость поиска. Совет по оптимизации показывает мне, что я могу объединить эти два поля в один, и это абсолютно ускорит поиск и индексирование, но я потерял зачет, который я хочу поймать при поиске (увеличить титул над телом)Оптимизация производительности поиска lucene

Есть ли все равно, чтобы объединить выгоды ?

+1

Не могли бы вы предоставить нам свои тесты, показывающие неприемлемую производительность, используя два отдельных поля? Вероятно, вы хотите, чтобы два отдельных поля запрещали поиск фразы для перекрытия разных полей, например title: «hello» body: «world» соответствовал поиску «hello world», если бы у вас было комбинированное поле заголовка + тело, даже если поле не содержало фраза. – sisve

+0

Если вы действительно хотите сохранить поле с комбинированными данными, посмотрите на пользовательские счетчики, которые позволят вам построить свою собственную маршрутизацию, используя любой алгоритм (и поле), который вы хотите. Я оставляю это как упражнение для реального ответа, чтобы на самом деле написать пример кода. ;) – sisve

ответ

0

Самый простой способ увеличить заголовок больше, чем тело и индексировать его в том же поле, чтобы добавить текст заголовка несколько раз.

Или вы можете использовать полезную нагрузку и переопределить сходство. См:

http://www.lucidimagination.com/blog/2009/08/05/getting-started-with-payloads/

Сомневаюсь либо из этих решений даст вам, что большая часть улучшения скорости, хотя.

+0

добавление название поля сложно идея Спасибо – Ehsan

+0

Да это абсолютно ускорить взгляд на http://wiki.apache.org/lucene-java/ImproveIndexingSpeed ​​ В моем случае я не нужно хранить название или тело Я просто хочу, чтобы они были проиндексированы, поэтому наилучшим подходом было бы объединение их для ускорения индексирования и поиска – Ehsan

0

Вы также можете попробовать увеличить время индекса. Например,

Document doc = new Document(); 
Field f = new Field(...) 
f.setBoost(10f); // or choose a float value of choice 
doc.Add(f); 

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