【问题标题】:How to use multifieldquery and filters in Lucene.net如何在 Lucene.net 中使用多字段查询和过滤器
【发布时间】:2010-02-02 17:31:07
【问题描述】:

我想对 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 次点击。

我做错了什么?

【问题讨论】:

    标签: filter lucene.net


    【解决方案1】:

    我想我现在有一个解决方案。我已经放弃使用 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); 
    

    【讨论】:

    • 如果要搜索的目标文本是“box fox”,而客户端输入的搜索词只有box,如何让lucene触发匹配“box fox”文档?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多