通过Term来生成查询:
IndexSearcher searcher = new IndexSearcher("build/index");
Term t = new Term("subject", "ant");
Query query = new TermQuery(t);
TopDocs docs = searcher.search(query, 10);
通过QueryParser来生成查询:
IndexSearcher searcher = new IndexSearcher("build/index");
QueryParser parser = new QueryParser("contents",
new SimpleAnalyzer());
Query query = parser.parse("+JUNIT +ANT -MOCK");
TopDocs docs = searcher.search(query, 10);
Document d = searcher.doc(docs.scoreDocs[0].doc);
查询权重的几个因素:详见:http://www.cnblogs.com/forfuture1978/archive/2010/03/07/1680007.html
tf,idf,boost:线性增加文档权重或者某个Field的权重,lengthNorm:归一化文档长度,coord(q, d):文档中包含的查询词数量。
Explanation:得到查询的评分细则。
TermQuery:不需要parse,不需要分词,直接按term项来查找。
RangeQuery:按照范围查询。
PrefixQuery,BooleanQuery,
PhraseQuery:短语查询,必须完全包含短语,slop指定间隔的距离。
WildcardQuery:通配符查询
FuzzyQuery:模糊查询,性能低
MatchAllDocsQuery:例子很少,不太明白
QueryParser:功能强大但是并不万能
本文介绍了如何使用Term和QueryParser生成查询,并解释了查询权重的几个关键因素,包括tf,idf,boost,lengthNorm,coord(q,d),并讨论了不同类型的查询如TermQuery、RangeQuery、PrefixQuery等。此外,还提供了关于查询解析器QueryParser的功能和局限性的说明。
4313

被折叠的 条评论
为什么被折叠?



