xuganggogo 2009-02-04 09:50 采纳率: 0%
浏览 286
已采纳

Lucene中demo:IndexHTML.java问题

我用Lucene2.4中HTML的例子,给一写网页建立索引。之后搜索不到网页上的内容,但是txt文档的内容可以搜索到。
这是为什么啊
[b]问题补充:[/b]
98687190 (中级程序员) ,
域和索引的目录都是正确的。
麻烦解释下“是否多条件查询的时候关系弄错了?比如Occur.MUST。”
Occur.MUST这个是什么? :)
[b]问题补充:[/b]
补充2:
import jeasy.analysis.MMAnalyzer;

import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.*;

public class Test {
public static void main(String[] args) throws Exception {
String indexPath = "d:/index", queryString = "我"; //指向索引目录的搜索器
Searcher searcher = new IndexSearcher(indexPath); //查询解析器:使用和索引同样的语言分析器
QueryParser qp = new QueryParser("contents",new SimpleAnalyzer());
String temp = "+(path:"+queryString+"* contents:"+queryString+"*)";
Query query = qp.parse(temp); //搜索结果使用Hits存储
Hits hits = searcher.search(query); //通过hits可以访问到相应字段的数据和查询的匹配度
System.out.println(hits.length());
for (int i=0; i<hits.length(); i++) {
System.out.println(hits.doc(i).get("path") + "; Score: " + hits.score(i));
System.out.println(hits.doc(i).get("contents"));
System.out.println(hits.doc(i).get("modified"));
System.out.println(hits.doc(i).get("uid"));
System.out.println(hits.doc(i).get("summary"));
System.out.println(hits.doc(i).get("title"));
}
}
}
[b]问题补充:[/b]
98687190请帮忙看看, :arrow:
[b]问题补充:[/b]
“还有String temp = "+(path:"+queryString+"* contents:"+queryString+"*)"; 第一次见用这样的写法。 ”
呵呵,因为看到过帖子。部分如下:
TermQuery可以用“field:key”方式,例如“content:lucene”。
BooleanQuery中‘与’用‘+’,‘或’用‘ ’,例如“content:java contenterl”。
WildcardQuery仍然用‘?’和‘*’,例如“content:use*”。
PhraseQuery用‘~’,例如“content:"中日"~5”。
PrefixQuery用‘*’,例如“中*”。
FuzzyQuery用‘~’,例如“content: wuzza ~”。
RangeQuery用‘[]’或‘{}’,前者表示闭区间,后者表示开区间,例如“time:[20060101 TO 20060130]”,注意TO区分大小写。
而且在索引txt文档的时候,这种方法也很简洁就用了。

  • 写回答

3条回答 默认 最新

  • weixin_42348590 2009-02-04 13:44
    关注

    QueryParser qp = new QueryParser("contents",new SimpleAnalyzer());

    你建立索引时候是new SimpleAnalyzer()???
    建议换一下StandardAnalyzer试试?

    还有String temp = "+(path:"+queryString+"* contents:"+queryString+"*)"; 第一次见用这样的写法。
    干脆把
    [code="java"]String temp = "+(path:"+queryString+"* contents:"+queryString+"*)";
    Query query = qp.parse(temp); //搜索结果使用Hits存储
    Hits hits = searcher.search(query); //通过hits可以访问到相应字段的数据和查询的匹配度 [/code]
    换成
    [code="java"]
    BooleanQuery query = new BooleanQuery()
    QueryParser parser1 = new QueryParser("path", analyzer);
    QueryParser parser2 = new QueryParser("contents", analyzer);
    query.add(parser1.parse(queryString),Occur.SHOULD);//检索path中是否出现关键词,Occur.MUST就是关键词必须在域中检索出。
    query.add(parser2.parse(queryString),Occur.MUST);//检索path中是否出现关键词,必须匹配contents
    Hits hits = searcher.search(query);//现场写的,不一定用BooleanQuery,但BooleanQuery 比较灵活点
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1