帮忙分析一下原因我自己猜测了一下,可能如下两个地方出问题:TermQuery query = new TermQuery(new Term("f", "自己"));TokenStream tokenStream =
new ChineseAnalyzer().tokenStream("f", new StringReader(text));请有用过的,一起来交流一下
qq 25251910 [email protected]
new ChineseAnalyzer().tokenStream("f", new StringReader(text));请有用过的,一起来交流一下
qq 25251910 [email protected]
TokenStream tokenStream =
new ChineseAnalyzer().tokenStream("f", new StringReader(text));修改成为下面:就可以了:TokenStream tokenStream =
new CJKAnalyzer().tokenStream("f", new StringReader(text));
但是高亮的时候是一个整句的进行高亮的,另外在别的地方找到了一个解决问题的思路:
import java.io.StringReader;
import java.util.ArrayList;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;public class AnalyzerUtils { public static Token[] tokensFromAnalysis(Analyzer analyzer, String text)
throws IOException {
TokenStream stream = analyzer.tokenStream("contents", new StringReader(
text));
ArrayList tokenList = new ArrayList();
while (true) {
Token token = stream.next();
if (token == null)
break;
tokenList.add(token);
}
return (Token[]) tokenList.toArray(new Token[0]);
} public static void displayTokensWithFullDetails(Analyzer analyzer,
String text) throws IOException {
Token[] tokens = tokensFromAnalysis(analyzer, text);
int position = 0;
for (int i = 0; i < tokens.length; i++) {
Token token = tokens[i];
int increment = token.getPositionIncrement();
if (increment > 0) {
position = position + increment;
System.out.println();
System.out.print(position + ": ");
}
System.out.print("[" + token.termText() + ":" + token.startOffset()
+ "->" + token.endOffset() + ":" + token.type() + "] ");
}
}}++++++++++++++++++++++++++++++++++++
package com.csdn;import java.io.StringReader;import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;public class Searcher {
public static void main(String[] args) throws Exception
{
String str = "利润总是能够自己照顾自己,而亏损则永远不会自动了结。投机者不得不对当初的小额亏损" +
"采取止损措施来确保自己不会蒙受巨大损失。这样一来,他就能维持自己账户的生存,终有一日,当他心中形成了某种建设性想法时," +
"还能重整旗鼓,开立新头寸,持有与过去犯错误时相同数额的股票。投机者不得不充当自己的保险经纪人,而确保投机事业持续下去的" +
"唯一抉择是,小心守护自己的资本账户,决不允许亏损大到足以威胁未来操作的程度,留得青山在,不怕没柴烧。一方面," +
"我认为成功的投资者或投机者事前必定总是有充分的理由才入市做多或做空的,另一方面,我也认为他们必定根据一定形式的" +
"准则或要领来确定首次入市建立头寸的时机。 ";
// StandardAnalyzer analyzer = new StandardAnalyzer();
CJKAnalyzer analyzer = new CJKAnalyzer();
AnalyzerUtils.displayTokensWithFullDetails(analyzer, str);
System.out.println();
TermQuery query = new TermQuery(new Term("contents", "利"));
Highlighter highlighter = new Highlighter(new QueryScorer(query));
TokenStream tokenStream = analyzer.tokenStream("contents",
new StringReader(str));
System.out.println(highlighter.getBestFragment(tokenStream, str));
}
}
这个是可以实现 对单个 如 自但是 对应 自己
两个字的就不行了,呵呵,csdn真的是不行了,呵呵,上面找的类似的lucene的文章列表都是没有什么深度的,这些是从 http://www.matrix.org.cn上面的答案可能做的大了,广了,也就失去了专业了,呵呵
System.out.println();
}