如何在Lucene.net中使用多字段查询和过滤器
问题描述:
我想在lucene.net索引上执行多字段搜索,但是根据其中一个字段过滤结果。下面是目前我在做什么:如何在Lucene.net中使用多字段查询和过滤器
索引的字段的含义是:
doc.Add(new Field("id", id.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.Add(new Field("title", title, Field.Store.NO, Field.Index.TOKENIZED));
doc.Add(new Field("summary", summary, Field.Store.NO, Field.Index.TOKENIZED, Field.TermVector.YES));
doc.Add(new Field("description", description, Field.Store.NO, Field.Index.TOKENIZED, Field.TermVector.YES));
doc.Add(new Field("distribution", distribution, Field.Store.NO, Field.Index.UN_TOKENIZED));
当我执行我做以下搜索:
MultiFieldQueryParser parser = new MultiFieldQueryParser(new string[]{"title", "summary", "description"}, analyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
Query query = parser.Parse(text);
BooleanQuery bq = new BooleanQuery();
TermQuery tq = new TermQuery(new Term("distribution", distribution));
bq.Add(tq, BooleanClause.Occur.MUST);
Filter filter = new QueryFilter(bq);
Hits hits = searcher.Search(query, filter);
然而,结果总是0次点击。
我在做什么错?
答
我想我现在有一个解决方案。我放弃了使用QueryFilter,并使用布尔查询来限制MultiFieldQuery之前的结果。因此,代码会是这个样子:
MultiFieldQueryParser parser = new MultiFieldQueryParser(new string[]{"title", "summary", "description"}, analyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
Query query = parser.Parse(text);
BooleanQuery bq = new BooleanQuery();
TermQuery tq = new TermQuery(new Term("distribution", distribution));
bq.Add(tq, BooleanClause.Occur.MUST);
bq.Add(query, BooleanClause.Occur.MUST)
Hits hits = searcher.Search(bq);
如果被搜索的目标文字“框中狐狸”,并通过客户端输入的搜索项只箱子,你怎么Lucene来触发的匹配“盒狐狸”文档? – 2013-04-07 13:15:12