2011-10-24 3 views
1

Lucene.Net을 사용하고 있습니다. 더 알아보기.이 기능. 이드가 MoreLikeThis 쿼리를 필터링하는 방법을 알아 내려고 노력 중입니다. 예를 들어 결과에 ID가 15 인 레코드는 필요하지 않습니다. 어떻게해야합니까?ID로 필터링하는 방법

답변

1
RAMDirectory dir = new RAMDirectory(); 
IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true); 
for (int i = 0; i < 20; i++) 
{ 
    Document doc = new Document(); 
    doc.Add(new Field("field1", "some text " + i.ToString(), Field.Store.YES, Field.Index.ANALYZED)); 
    doc.Add(new Field("ID", i.ToString(), Field.Store.YES, Field.Index.ANALYZED)); 
    writer.AddDocument(doc); 
} 
writer.Close(); 

IndexReader reader = IndexReader.Open(dir); 

Lucene.Net.Search.Similar.MoreLikeThisQuery mltq = new Lucene.Net.Search.Similar.MoreLikeThisQuery("text", new string[] { "field1" }, new WhitespaceAnalyzer()); 

BooleanQuery bq = new BooleanQuery(); 
bq.Add(new MatchAllDocsQuery(), BooleanClause.Occur.MUST); 
bq.Add(new TermQuery(new Term("ID","15")),BooleanClause.Occur.MUST_NOT); 
Filter filter = new CachingWrapperFilter(new QueryWrapperFilter(bq)); 

TopDocs td = new IndexSearcher(reader).Search(mltq, filter, 100); 
Debug.Assert(td.TotalHits == 19); 

reader.Close(); 
관련 문제