Lucene.net-查询返回不需要的文档

Lucene.net-查询返回不需要的文档,lucene,lucene.net,Lucene,Lucene.net,我的所有Lucene.net(2.9.2)文档都有两个字段: 类别 正文 bodytext是默认字段,是存储文档所有文本的位置(使用field.Store.NO、field.Index.analysis、field.TermVector.WITH_POSITIONS\u offset) categoryid只是一个以文本形式存储的数字字段:field.Store.YES,field.Index.NOT\u分析 执行此查询时,它仅返回类别ID为:categoryid:1 但是,当我执行此查询时

我的所有Lucene.net(2.9.2)文档都有两个字段:

  • 类别
  • 正文
bodytext
是默认字段,是存储文档所有文本的位置(使用
field.Store.NO、field.Index.analysis、field.TermVector.WITH_POSITIONS\u offset

categoryid
只是一个以文本形式存储的数字字段:
field.Store.YES,field.Index.NOT\u分析

执行此查询时,它仅返回类别ID为:
categoryid:1

但是,当我执行此查询时:
categoryid:1 foo bar
会返回除1之外的其他类别的文档

为什么会这样?我如何才能强制它尊重原始的
类别id:N
查询术语?

是否要求输入的所有单词都出现在匹配的文档中

var分析器=新的标准分析器(版本.LUCENE_30);
var queryParser=新的queryParser(Version.LUCENE_30,“bodytext”,analyzer);
//这确保了所有条款都是必需的。
queryParser.DefaultOperator=queryParser.Operator.AND;
var query=queryParser.Parse(“categoryid:1 foo bar”);
//query=“+categoryid:1+bodytext:foo+bodytext:bar”

是Lucene中使用OR运算符而不是AND的默认值?@David,准确地说。它能更好地处理拼错的单词;导致忽略它们而不是空搜索结果。在2.9版中,语法略有不同:
queryParser.SetDefaultOperator(queryParser.AND_OPERATOR)