.net lucene多字段搜索

时间:2009-09-16 14:43:50

标签: .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”字段中搜索“堪萨斯城”这样的术语,另一个字段“Type”必须是“Airport”

为此我正在写

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);

但它没有给我任何结果,

如果我从

中删除'f'
Hits results = searcher.Search(searchQuery,f);

然后它给出结果,但“类型”字段包含除“机场”之外的值。

我出错的任何想法?

1 个答案:

答案 0 :(得分:2)

查看您的代码我认为您需要将每个查询(一个用于SearchKey,一个用于Type)添加到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);

我没有测试过代码,但应该可以使用。