我的索引器使用Lucene,在写入大小约为16GB的索引文件后,似乎在索引操作期间崩溃。
写入控制台的堆栈跟踪重复三次,原因我不知道。为简洁起见,我只提供了重复的单个部分。这是Lucene写给conolse的堆栈跟踪:
Lucene.Net.Index.MergePolicy+MergeException: Exception of type 'Lucene.Net.Index.MergePolicy+MergeException' was thrown. --->
System.IO.FileNotFoundException: Could not find file 'PATH_TO_MY_INDEX_DIRECTORY\_xx.cfs'.
File name: 'PATH_TO_MY_INDEX_DIRECTORY\_xx.cfs'
at Lucene.Net.Index.IndexWriter.HandleMergeException(Exception t, OneMerge merge)
at Lucene.Net.Index.IndexWriter.Merge(OneMerge merge)
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run()
--- End of inner exception stack trace ---
at Lucene.Net.Index.ConcurrentMergeScheduler.HandleMergeException(Exception exc)
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
当我用Luke的Java版本打开生成的日志时,索引被删除(可能是因为它已损坏,例如“write.lock”文件仍然存在),尽管这可能是Luke的错误或配置错误。 / p>
创建这个索引需要大约36个小时,而且我不想第三次再次这样做(这不是第一次发生)。
我不知道造成这种情况的原因。我该怎么办?
我正在使用Lucene.net 2.9.2,因为它是为.NET 3.5构建的最后一个版本。
答案 0 :(得分:4)
我意识到这是因为在没有调用Commit
的情况下过多地写入索引。在编写了大约10MB的数据后,我修改了我的代码来调用Commit
。我没有异常 - 当它崩溃时它意味着我不需要重建整个36GB索引,只需要重建10MB。
答案 1 :(得分:1)
需要一段时间才能找到,但事实证明(在我的情况下)是由本地硬盘已满。更有用的异常消息会有所帮助。
答案 2 :(得分:0)
是的,聚会非常晚,但我有同样的问题作为这个例外的一部分:
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
add_filter("product_type_options", "woo_bookable_product");
function woo_bookable_product($product_type_options)
{
$product_type_options["Bookable"] = array(
"id" => "_bookable",
"wrapper_class" => "show_if_simple",
"label" => "Bookable",
"description" => "Book Your Product",
"default" => "yes",
);
return $product_type_options;
}
add_action("save_post_product",'woo_save_bookable_data', 10, 3);
function woo_save_bookable_data($post_ID, $product, $update)
{
$meta_value = $_POST["_bookable"] ? 'yes' : 'no';
update_post_meta($product->ID, "_bookable" ,$meta_value);
}
function woo_bookable_scripts()
{
wp_enqueue_script('load_book', plugin_dir_url( __FILE__ ).'js/load_book.js',array('jquery'));
wp_localize_script('load_book','ajax_object',array('ajax_url'=>admin_url('admin-ajax.php')));
}
add_action('wp_enqueue_scripts','woo_bookable_scripts');
add_action('wp_ajax_woo_bookable_shortcode', 'woo_bookable_shortcode');
add_action('wp_ajax_nopriv_woo_bookable_shortcode', 'woo_bookable_shortcode');
function woo_bookable_shortcode()
{
$Data = '';
$query = new WP_Query(array(
'post_type' => 'product',
'meta_key' => '_bookable'
));
$Data.='<select name="woo_book_id" class="woo_book_pro">
<option value="0">Bookable Products</option>';
if($query->have_posts()):while($query->have_posts()):$query->the_post();
$Data.='<option value="'. get_the_ID() .'">'. get_the_title() .'</option>';
endwhile;endif;
$Data.='</select>';
$Data.= woo_bookable_add_to_cart();
echo $Data;
}
add_shortcode('bookable','woo_bookable_shortcode');
我通过删除所有索引并重建它们来解决这个问题。