gpt4 book ai didi

filter - 如何在 Lucene.net 中使用 multifieldquery 和过滤器

转载 作者:行者123 更新时间:2023-12-04 18:53:44 26 4
gpt4 key购买 nike

我想对 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 之前使用 bool 查询来限制结果。所以代码看起来像这样:

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

关于filter - 如何在 Lucene.net 中使用 multifieldquery 和过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com