zoukankan      html  css  js  c++  java
  • [ lucene FAQ ] Lucene QueryParser Exception : Encountered <EOF> at line *

    Encountered <EOF> 这个异常通常会出现在多线程并发使用同一个queryParser对象时发生。

    可以通过以下实验进行验证。

    static QueryParser parser;
    
    	static {
    		Analyzer a = new IKAnalyzer();
    		parser = new QueryParser(Version.LUCENE_36, "f", a);
    	}
    
    @Override
    	public void run() {
    		long bt = System.currentTimeMillis();
    		try {
    			for (int i = 0; i < 100000; i++) {
    				Query q = null;
    				q = parser.parse("食品级达标全叶芦荟");
    				// System.out.println(q);
    			}
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		long et = System.currentTimeMillis();
    		System.out.println(et - bt);
    	}
    

    启动N个线程,一般刚开始就会排出这个异常。

    解决办法一般有两个:

    1.每个线程使用“独占”的queryparser对象,不进行公用。

    2.公用queryparser对象,但提供一个同步的解析方式。

    经过测试,方式二效率较低一点,10万次解析慢10s左右(需要考虑测试机器问题,本测试机器为pc机)。

    不过方式二较易控制,且一定程度上减少GC。

      

  • 相关阅读:
    题解-Quantifier Question
    题解-[WC2011]最大XOR和路径
    笔记-Recursive Queries
    树套树
    SG函数
    题解-Magic Ship
    分块
    文章根据时间段显示的微信名和微信号
    jquery 在页面上根据ID定位(jQuery锚点跳转及相关操作) 经典
    nginx配置反向代理
  • 原文地址:https://www.cnblogs.com/huangfox/p/2550299.html
Copyright © 2011-2022 走看看