我创建了一个索引
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);
然后它给出结果,但“类型”字段包含除“机场”之外的值。
我出错的任何想法?
答案 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);
我没有测试过代码,但应该可以使用。