2009-09-16 61 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); 

我还没有测试代码,但它应该工作。