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条)

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失