救命呀!!我要在Linux 开发一个以文件方式读取*.html文件并检索其中的关键字的全文搜索程序,可以加到500分(200分)

  • 主题发起人 主题发起人 wangxiaoling
  • 开始时间 开始时间
孙老师,我再问最后一个问题
当我用jsp查找中文关键词的时候,无论我输入什么中文,query.toString() 返回的都是乱码
如:
...
String strName = request.getParameter("query");
Searcher searcher = new IndexSearcher("index");
Analyzer analyzer = new ChineseAnalyzer();
// 这行是对的
out.println("Searching for: " + strName + "<br>/n");
Query query = QueryParser.parse(strName, "contents", analyzer);
//这行输出乱码
out.println("Searching for: " + query.toString("contents") + "<br>/n");
.....
多谢了!
 
jsp的中文问题: http://www.delphibbs.com/delphibbs/dispq.asp?lid=1099438
 
yysun老师:
好象在
http://richsearch.com/
不能进行这样的查询呀?
+subject:c#
或者是有什么特殊的写法?
 
请问yysun老师,
如下两段代码应该放在哪两个java文件中重新编译!!!
建立索引:
IndexWriter writer = new IndexWriter(INDEX_PATH, new ChineseAnalyzer(), true/false);
Documentdo
c = newdo
cument();
doc.add(Field.Text("content", content);
doc.add(Field.Keyword("id", id);
....
writer.optimize();
writer.close();
全文检索:
Searcher searcher = new IndexSearcher(indexPath);
ChineseAnalyzer anlalyzer = new ChineseAnalyzer();
Query query = QueryParser.parse(queryString, "content", anlalyzer);
Hits hits = searcher.search(query);
//hits 里面就是检索到的内容
....
for (int ii=0;
ii<length;
ii++) {
do
cumentdo
c = hits.doc(ii);
String id =do
c.get("id");
String content =do
c.get("content");
......
}
 
孙老师,为何出现以下错误:
ERROR opening the Index - contact sysadmin! While parsing query: :read past EOF
请指教!
 
我在使用lucene1.2进行索引的时候(demo里面的IndexHTML)总会报Parse Aborted: Lexical error at line 10, column 36. Encountered:的错误,而且搜索时有很多的?号
请问,这是怎么回事?
 
搜索引擎lucene的分词。搜索c,C++,TCP/IP.
问题的提出:搜索 C 的时候不要把 C++ 也给搜索出来。
首先想到了yysun曾经写过lucene中文分词的东西。(http://www.delphibbs.com/delphibbs/dispq.asp?lid=755450)
把他的代码弄下来:
(http://www.delphibbs.com/delphibbs/DispQ.asp?LID=747459)
主要是三个文件文件:
1. ChineseAnalyzer, 2.ChineseFilter, 3. ChineseTokenizer
于是学着做了三个我自己的类。 1. HrAnalyzer, 2.HrFilter, 3. HrTokenizer
仔细看了一段时间,主要东西在ChineseTokenizer.next()里面。
于是改成下面的样子:
public final Token next() throws java.io.IOException {
length = 0;
start = offset;
while (true) {
final char c;
offset++;
if (bufferIndex >= dataLen) {
dataLen = input.read(ioBuffer);
bufferIndex = 0;
};
if (dataLen == -1) return flush();
else
c = (char) ioBuffer[bufferIndex++];

//Added by bell wang.
String buffstr = new String(buffer, 0, length);

if (buffstr.equals("c++")) {
return flush();
}
switch(Character.getType(c)) {
case Character.DECIMAL_DIGIT_NUMBER:
case Character.LOWERCASE_LETTER:
case Character.UPPERCASE_LETTER:
push(c);
if (length == MAX_WORD_LEN) return flush();
break;
case Character.OTHER_LETTER:
if (length>0) {
bufferIndex--;
return flush();
}
push(c);
return flush();
default:
//Added by bell wang.
if (c=='+') {
push(c);
if (length == MAX_WORD_LEN) return flush();
break;
}//end
if (length>0) return flush();
break;
}
}
}
做好后,搜索"C" ,却搜索不到, 明明有的呀。
仔细一看,ChineseFilter.next(), 里面有这么一行:
if (text.length()>1) {
return token;
}, 原来是把长度为1的字符都过滤掉了。于是改为:if (text.length()>=1)
(连单个字符也搜索,效率是不是低了??)
再次搜索,可以搜索到"c", 不会搜索到C++.
搜索C++, 出现异常。 加号被当成了条件字符...
这个问题还没有解决。 下面继续去解决.....
 
孙老师: 请问上面的问题改如何解决?
whbell@sina.com.cn
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部