На самом деле мой способ создания и оптимизации индексов состоит в том, что я каждый раз создаю и оптимизирую кусок записей, а не конвертируем все за один раз. Теперь проблема, с которой я столкнулся, заключается в том, что я получаю дубликаты документов/записей, созданных в индексе. Мне нужно знать, есть ли какая-либо функция или код для удаления дубликатов из индекса. благодарит заранее.удаление дубликатов документов из zend lucene indexes
ответ
У вас должен быть термин, который является уникальным идентификатором. Затем перед добавлением документа в индекс вы удаляете его.
Дубликаты - это просто экземпляры, в которых у вас есть несколько документов с тем же уникальным идентификатором. Поэтому вы просто перечислите все термины в своем уникальном поле id и выполните поиск тех, у которых есть два результата. Насколько я знаю, для этого не существует встроенного метода.
Вам необходимо удалить запись, прежде чем обновлять ее, это так, как работает Lucene. Вы не можете обновить существующую запись.
это, как вы удаляете запись
$index = Zend_Search_Lucene::open('data/index');//'data/index' is the file that lucene generated
$query = new Zend_Search_Lucene_Search_Query_Term(new
Zend_Search_Lucene_Index_Term($listing_id, 'listing_id'));// 'listing_id' is a field i added when creating index for the first time. $listing_id is the id value of the row i want to delete
$hits = $index->find($query);
foreach ($hits as $hit) {
$index->delete($hit->id);// $hit->id is not listing_id, it's lucene unique index of the row that has listing_id = $listing_id
}
Теперь вы можете сделать обновление, которое в основном вставка :), это способ Lucene работы.
Не забудьте зафиксировать $index->commit()
, прежде чем добавлять новые данные. Именно по этой причине мои дубликаты данных возвращаются в $index->find($query)
.
$index = Zend_Search_Lucene::open('/lucene/index');
$query = new Zend_Search_Lucene_Search_Query_Term (new Zend_Search_Lucene_Index_Term($id, 'key'));
$hits = $index->find($query);
foreach ($hits as $hit) {
$index->delete($hit->id); // $hit->id is not key , it's lucene unique index of the row that has key = $id
}
$index->commit(); // apply changes (delete) before index new data
doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::keyword('key', $id));
$doc->addField(Zend_Search_Lucene_Field::Text('user', $user, 'utf-8'));
- 1. удаление дубликатов документов из Topdocs
- 2. Jackrabbit Lucene indexes
- 3. Удаление и обновление документов в индексе Lucene
- 4. MongoDB: удаление дубликатов документов с помощью массивов
- 5. Zend Lucene удалить документ
- 6. Удержание Sitecore Lucene Indexes Up-to-Date
- 7. Удаление дубликатов из матрицы
- 8. Удаление дубликатов из массива
- 9. Удаление дубликатов из Еогеасп
- 10. Удаление дубликатов из БД
- 11. Удаление дубликатов из int []
- 12. Удаление дубликатов из строки
- 13. Удаление дубликатов из adoquery
- 14. Удаление дубликатов из массива
- 15. Удаление дубликатов из QList
- 16. Удаление дубликатов из sqldatasource
- 17. Удаление дубликатов из строки
- 18. Удаление дубликатов из данных
- 19. Удаление дубликатов из файла
- 20. Удаление дубликатов из массива
- 21. Удаление дубликатов из DoublyLinkedList
- 22. Удаление дубликатов из списка
- 23. Удаление дубликатов из списка
- 24. Удаление документа из Документов Google с использованием Zend Gdata
- 25. zend search lucene
- 26. Lucene Индексирование нескольких документов
- 27. Как улучшить производительность Zend Lucene?
- 28. Python: Удаление дубликатов из списка
- 29. SQL: Удаление дубликатов из столбца
- 30. Удаление дубликатов из выпадающего списка