2009-09-16 62 views
2

我創建了一個索引.NET的Lucene搜索萬事

Document doc = new Document(); 
     doc.Add(new Field("SearchKey", (item.FullTextColumn ?? item.Code), Field.Store.NO, Field.Index.TOKENIZED)); 
     doc.Add(new Field("Type", item.Type.ToString(), Field.Store.YES, Field.Index.TOKENIZED)); 
     doc.Add(new Field("Name", item.Name, Field.Store.YES, Field.Index.UN_TOKENIZED)); 
     doc.Add(new Field("Code", item.Code ?? string.Empty, Field.Store.YES, Field.Index.UN_TOKENIZED)); 

,我試圖尋找像「堪薩斯城」中的「SearchKey」領域的一個術語,另外申請「類型」必須是「機場」

爲我寫

QueryParser parser = new QueryParser("SearchKey", analyzer); 
     Query searchQuery = parser.Parse(text); 
TermQuery typeQuery = new TermQuery(new Term("Type", "Airport")); 
BooleanQuery filterQuery = new BooleanQuery(); 
     filterQuery.Add(typeQuery, BooleanClause.Occur.MUST); 
     Filter f = new QueryFilter(filterQuery); 
Hits results = searcher.Search(searchQuery,f); 

,但它給了我沒有結果,

,如果我從

Hits results = searcher.Search(searchQuery,f); 

刪除「F」,那麼它給出的結果,但「類型」字段包含其他的則值「機場」。

我要去的地方錯了什麼想法?

回答

2

看你的代碼,我認爲你需要每個查詢(一個用於SearchKey,一個用於類型)添加到BooleanQuery像下面。

var standardLuceneAnalyzer = new StandardAnalyzer(); 

var query1 = new QueryParser("SearchKey", standardLuceneAnalyzer).Parse("Kansas City*"); 
var query2 = new QueryParser("Type", standardLuceneAnalyzer).Parse("Airport"); 

BooleanQuery filterQuery = new BooleanQuery(); 
filterQuery.Add(query1, BooleanClause.Occur.MUST); 
filterQuery.Add(query1, BooleanClause.Occur.MUST); 

TopDocs results = searcher.Search(filterQuery); 

我還沒有測試代碼,但它應該工作。