代码出现错误要调试绝对是另人不耐烦的事,不过调好之后总有收获的。这不,由遇困难了。
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.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的作用效果完全一样。