2010-05-06 2 views
1

Я просто взял на себя наши материалы solr/lucene от своего бывшего коллеги. Но есть странная ошибка.Никакая оптимизация не приводит к неправильному результату поиска

Если после dataimport нет оптимизации, на самом деле, если есть несколько файлов сегмента, результат поиска будет неправильным. Мы используем настраиваемый solr searchComponent. Насколько я знаю о lucene, оптимизация не должна влиять на результат поиска. Я сомневаюсь, что это может быть связано с многопоточным или незакрытым поисковиком/читателем или чем-то еще.

Любой может помочь? Спасибо.

ответ

0

Это все еще предположение. Я нахожу, что есть пользовательский lucene фильтр, который используется компонентом пользовательского поиска. И в этом фильтре SolrIndexSearcher.search вызывается против запросов фильтра. Шансы высоки, что это проклятая причина.

Может быть намек на парней, знакомых с люцином.

+0

Нашел одно интересное сообщение, в котором упоминался фильтр, сегмент и т. Д. http://www.gossamer-threads.com/lists/lucene/java-user/97270 – KailZhang

+0

Я думаю, что я очень близок к истине. В процессе компонента поиска вызывается lucene.indexsearcher.search, а не поиск solr. Если я заменил этот поиск на solr, результат будет правильным. Поэтому теперь моя задача - переписать код для использования solrs (старый код использует docs для возврата из поиска lucene). – KailZhang

+0

Ну, я вернулся, чтобы раскрыть мое открытие. Теперь я совершенно уверен, что произошло. SolrIndexSearcher.getDocSet вызывается в нашем фильтре, но этот getDocSet будет сканировать весь индекс, что означает все сегменты, тогда как фильтр вызывается для каждого сегмента. Это означает, что если есть 8 сегментов, будет выполнено 8 * 8 сканирований. И, пожалуйста, также помните, что в фильтре doc id поддерживается в сегменте. Поэтому остерегайтесь этого, когда вы хотите написать специальный фильтр люцен. – KailZhang