2013-10-24 4 views
2

На нашем веб-сайте мы используем запросы Lucene для получения результатов поиска. Проблема в том, что мы случайно получали подмножество правильных результатов. Обычно все нормально. Но когда вы делаете некоторые вещи, такие как корректировка критериев поиска, изменение порядка сортировки и т. Д., Вы вдруг видите подмножество результатов (иногда 0 результатов). Если вы снова измените порядок сортировки, вы снова получите правильные результаты, и вы больше никогда не увидите проблему.Lucene возвращает непоследовательные результаты

Есть ли у кого-нибудь опыт в этой проблеме и есть идея о том, что может быть причиной этого? Может ли это быть повреждением индекса или может быть высокая нагрузка на индекс?

Мы используем Lucene.Net 2.9.4.1. Это проект Sitecore.NET 6.6.0 (версия 130404). Наш индекс содержит менее 10000 документов.

Вот пример кода, который мы используем, чтобы получить общий результат подсчета:

 Index index = SearchManager.GetIndex("indexname"); 

     using (IndexSearchContext searchContext = index.CreateSearchContext()) 
     { 
      Lucene.Net.Search.IndexSearcher searcher = searchContext.Searcher; 

      TopScoreDocCollector collector = TopScoreDocCollector.create(1, false); 
      searcher.Search(query, collector); 
      return collector.GetTotalHits(); 
     } 

Мы также имели this weird problem в прошлом. Это было решено с помощью патча, предоставленного sitecore, для обнаружения этого и сброса внутренней переменной Lucene. Не уверен, связаны ли они.

+0

Вы обновляете некоторые элементы одновременно в другом потоке или перестраиваете индекс? –

+0

Технически, когда поиск по индексу выполняется одним пользователем, публикация может произойти в другой части системы, которая приводит к обновлению индекса. Изменения индекса могут происходить несколько раз в минуту. Поиск параллельных индексов может происходить сотни раз в минуту. – ravinsp

+0

Потеря единственного результата поиска lucene может быть вызвана механизмом обновления индекса lucene в sitecore - он удаляет существующие элементы из индекса, обходит новую версию и добавляет обратно к индексу. Существует разрыв между удалением старого и добавлением нового, в котором элемент не находится в индексе. Тем не менее, он не объясняет, что вообще нет никаких предметов. –

ответ

0

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

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