各位问下hibernate-search?

wangji131 2009-09-09 11:43:37
请问谁用过hibernate-search。我使用的时候出现两个问题:
第一个问题是:
出现的异常情况:
java.lang.StringIndexOutOfBoundsException: String index out of range: 2182
at java.lang.String.substring(String.java:1935)
at org.apache.lucene.search.highlight.Highlighter.getBestTextFragments(Highlighter.java:271)
at org.apache.lucene.search.highlight.Highlighter.getBestFragments(Highlighter.java:175)
at org.apache.lucene.search.highlight.Highlighter.getBestFragments(Highlighter.java:460)
at cn.org.coral.biz.cms.service.CmsContentService.fullTextSearch(CmsContentService.java:170)

第二个问题是重复的问题: 比如说:搜索内容"3G",得到的展现内容中有“33G”。

代码方法为:


public Object[] fullTextSearch(int kind,String text, int startrow, int pagesize) {
Object[] rt = new Object[]{new Integer(0),new ArrayList()};
FullTextSession fullTextSession = Search.createFullTextSession(getSession());

Analyzer analyzer = new PaodingAnalyzer();
QueryParser parser = null;
switch(kind){
case 1:
parser = new QueryParser("cmsname", analyzer);
break;
case 2:
parser = new QueryParser("keywords", analyzer);
break;
case 3:
parser = new QueryParser("summary", analyzer);
break;
case 4:
parser = new QueryParser("contents", analyzer);
break;
case 5:
return cmsFileService.fileSearch(new String[]{"filecontents","title"}, text, startrow, pagesize);
default:
parser = new MultiFieldQueryParser(new String[]{"cmsname","keywords","summary","contents","availabilitytime"}, analyzer);

}

Query luceneQuery = null;
try {
luceneQuery = parser.parse(text);

org.hibernate.search.FullTextQuery query = fullTextSession
.createFullTextQuery(luceneQuery, CmsContent.class);
query.setProjection("oid","cmsname","keywords","summary","status","contents","usualname","areaname","deptname","hurrayleval");
query.enableFullTextFilter("statusFilter");
rt[0] = query.getResultSize();
query.setFirstResult(startrow);
query.setMaxResults(pagesize);
rt[1] = query.list();

SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(
lefttag, righttag);
Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(
luceneQuery));
//SimpleFragmenter sf = new SimpleFragmenter(100);
//sf.setFragmentSize(3000);


highlighter.setTextFragmenter(new SimpleFragmenter(100));
//highlighter.setTextFragmenter(sf);
ArrayList<Object[]> list = (ArrayList<Object[]>)rt[1];
for (int i=0; i<list.size(); i++) {
Object[] cms = list.get(i);
String htext = (String)cms[5];
if(UtilString.isEmpty(htext))
continue;
TokenStream tokenStream = analyzer.tokenStream("contents", new StringReader(htext));
try {
//htext = highlighter.getBestFragment(tokenStream, htext);
htext = highlighter.getBestFragments(tokenStream, htext, 8, "");

} catch (IOException e) {
logger.error("Error while highlighter the text! ", e);
}
cms[5] = htext;
}
} catch (ParseException e) {
e.printStackTrace();
}
return rt;
}
...全文
106 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bumie2008 2010-09-13
  • 打赏
  • 举报
回复
楼主,你一定知道这个问题
帮我看一下哦

<property name="hibernate.search.default.indexBase">
d:\index
</property>
这样写是可以的,

但是以下就不知道了,是个错误的
<property name="hibernate.search.default.indexBase">
classpath:indexdoc

</property>
//放在WEB-INF\classes\indexdoc 下 怎么写啊
还有以下问题不解,望告知.

QueryParser parser = new QueryParser("newstitle", new StandardAnalyzer());
   org.apache.lucene.search.Query luceneQuery = null;
try {
luceneQuery = parser.parse(newstitle); // build Lucene query
} catch (ParseException e) {
e.printStackTrace();
            }
这个是对newstitle新闻标题进行查询,能不能对新闻所有记录查询啊?

lee_09 2009-09-10
  • 打赏
  • 举报
回复
同意楼上看法
warrior30 2009-09-10
  • 打赏
  • 举报
回复
第一个是字符串长度过界错误
第二个模糊检索,肯定搜索'3G'会把'33G'这样含有此字符串的检索出来
youdandan 2009-09-10
  • 打赏
  • 举报
回复
幫頂
youdandan 2009-09-10
  • 打赏
  • 举报
回复
很奇怪耶
wangji131 2009-09-10
  • 打赏
  • 举报
回复
没有,我看了内容的。是“3G”。没有33G,当输入“3 G”,空格查询下的时候。不会出现33G,
zhoujingxian 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qiushyfm 的回复:]
第一个是字符串长度过界错误
第二个模糊检索,肯定搜索'3G'会把'33G'这样含有此字符串的检索出来
[/Quote]

这位解释挺清楚的,

PS:代码真的蛮长的
lzh_me 2009-09-10
  • 打赏
  • 举报
回复
up...

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧