- crazy.j
- 等级: 初级会员

- 性别:

- 文章: 56
- 积分: 10
- 来自: 北京

|
最后更新时间:2007-11-10 关键字: Lucene
java 代码
-
-
-
- package com.futurebnc.demo.search.test;
-
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.index.IndexWriter;
- import org.apache.lucene.index.Term;
- import org.apache.lucene.search.BooleanClause;
- import org.apache.lucene.search.BooleanQuery;
- import org.apache.lucene.search.Hits;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.search.Query;
- import org.apache.lucene.search.TermQuery;
-
-
-
-
-
- public class TestBooleanQuery {
- public static void main(String[] args) throws Exception {
- createIndex();
-
- Query query1 = null;
- Query query2 = null;
- Query query3 = null;
- Query query4 = null;
- Query query5 = null;
- BooleanQuery bquerymain = null;
- BooleanQuery bquery1 = null;
- BooleanQuery bquery2 = null;
- BooleanQuery bquery3 = null;
- Hits hits = null;
-
- IndexSearcher searcher = new IndexSearcher("c:\\java\\index");
-
- query1 = new TermQuery(new Term("name", "word1"));
- query2 = new TermQuery(new Term("name", "word2"));
-
- query3 = new TermQuery(new Term("name", "word4"));
- query4 = new TermQuery(new Term("name", "word5"));
-
- query5 = new TermQuery(new Term("name", "word6"));
-
-
-
-
- bquerymain = new BooleanQuery();
- bquery1 = new BooleanQuery();
- bquery2 = new BooleanQuery();
- bquery3 = new BooleanQuery();
-
- bquery1.add(query1, BooleanClause.Occur.MUST);
- bquery1.add(query2, BooleanClause.Occur.MUST);
-
- bquery2.add(query3, BooleanClause.Occur.MUST);
- bquery2.add(query4, BooleanClause.Occur.MUST);
-
- bquery3.add(query5, BooleanClause.Occur.MUST_NOT);
-
- bquerymain.add(bquery1, BooleanClause.Occur.SHOULD);
- bquerymain.add(bquery2, BooleanClause.Occur.SHOULD);
- bquerymain.add(bquery3, BooleanClause.Occur.MUST);
- hits = searcher.search(bquerymain);
- printResult(hits, bquerymain.toString());
-
- }
-
- public static void createIndex() throws Exception {
- Document doc1 = new Document();
- Field field = null;
- field = new Field("name", "word1 word2 word3", Field.Store.YES,
- Field.Index.TOKENIZED);
- doc1.add(field);
- field = new Field("title", "doc1", Field.Store.YES, Field.Index.TOKENIZED);
- doc1.add(field);
-
- Document doc2 = new Document();
- field = new Field("name", "word4 word5", Field.Store.YES,
- Field.Index.TOKENIZED);
- doc2.add(field);
- field = new Field("title", "doc2", Field.Store.YES, Field.Index.TOKENIZED);
- doc2.add(field);
-
- Document doc3 = new Document();
- field = new Field("name", "word1 word2 word6", Field.Store.YES,
- Field.Index.TOKENIZED);
- doc3.add(field);
- field = new Field("title", "doc3", Field.Store.YES, Field.Index.TOKENIZED);
- doc3.add(field);
-
- IndexWriter writer = new IndexWriter("c:\\java\\index",
- new StandardAnalyzer(), true);
- writer.addDocument(doc1);
- writer.addDocument(doc2);
- writer.addDocument(doc3);
- writer.close();
- }
-
- public static void printResult(Hits hits, String key) throws Exception {
- System.out.println("查询 " + key);
- if (hits != null) {
- if (hits.length() == 0) {
- System.out.println("没有找到任何结果");
- } else {
- System.out.println("找到" + hits.length() + "个结果");
- for (int i = 0; i < hits.length(); i++) {
- Document d = hits.doc(i);
- String dname = d.get("title");
- System.out.print(dname + " ");
- }
- System.out.println();
- System.out.println();
- }
- }
- }
-
- }
这段代码为何查询不到任何结果?
但是如果将65行代码改为
java 代码
- bquerymain.add(query5, BooleanClause.Occur.MUST_NOT);
就可以查询到结果
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
| 返回顶楼 |
|
|
- yinhj
- 等级: 初级会员

- 性别:

- 文章: 30
- 积分: 22

|
你的Lucene逻辑表达式是什么呢?
printf出来瞧瞧就知道了问题在哪里了
看得不是很明白。
|
| 返回顶楼 |
|
|