代码出现错误要调试绝对是另人不耐烦的事,不过调好之后总有收获的。这不,由遇困难了。
SpanQuery:
索引
IndexWriter writer
=
new
IndexWriter(path,
new
StandardAnalyzer(),
true
);
writer.setUseCompoundFile( false );
Document doc1 = new Document();
Document doc2 = new Document();
Document doc3 = new Document();
Field f1 = new Field( " content " , " Last night David gave him very beautiful clothes " ,
Field.Store.YES, Field.Index.TOKENIZED);
Field f2 = new Field( " content " , " Last night Mary gave him very poor clothes " ,
Field.Store.YES, Field.Index.TOKENIZED);
Field f3 = new Field( " content " , " Last night Candy gave him very beautiful clothes " ,
Field.Store.YES, Field.Index.TOKENIZED);
doc1.add(f1);
doc2.add(f2);
doc3.add(f3);
writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
writer.close();
writer.setUseCompoundFile( false );
Document doc1 = new Document();
Document doc2 = new Document();
Document doc3 = new Document();
Field f1 = new Field( " content " , " Last night David gave him very beautiful clothes " ,
Field.Store.YES, Field.Index.TOKENIZED);
Field f2 = new Field( " content " , " Last night Mary gave him very poor clothes " ,
Field.Store.YES, Field.Index.TOKENIZED);
Field f3 = new Field( " content " , " Last night Candy gave him very beautiful clothes " ,
Field.Store.YES, Field.Index.TOKENIZED);
doc1.add(f1);
doc2.add(f2);
doc3.add(f3);
writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
writer.close();
检索:
IndexSearcher searcher
=
new
IndexSearcher(path);
Term t1 = new Term( " content " , " David " );
TermQuery query = new TermQuery(t1);
Hits hits = searcher.search(query);
for ( int i = 0 ;i < hits.length();i ++ )
{
System.out.println( " ============ " );
System.out.println(hits.doc(i));
System.out.println( " ------------ " );
}
Term t1 = new Term( " content " , " David " );
TermQuery query = new TermQuery(t1);
Hits hits = searcher.search(query);
for ( int i = 0 ;i < hits.length();i ++ )
{
System.out.println( " ============ " );
System.out.println(hits.doc(i));
System.out.println( " ------------ " );
}
增加的包:
import org.apache.lucene.search.spans.SpanNearQuery;
import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.SpanTermQuery;
import org.apache.lucene.search.spans.Spans;
上面的代码应该是正确的,可是一直出现hot code replace。也没查到原因。
终于找到原因啦,定义的词条“David”要写成“david”。虽然知道这样写是正确的,但还不知道原因啊。
注:SpanTermQuery与TermQuery的作用效果完全一样。