1

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

  • 类别ID
  • 主体

bodytext是默认字段,是存储所有文档文本的位置(使用Field.Store.NO , Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)。

categoryid只是一个存储为文本的数字字段:Field.Store.YES, Field.Index.NOT_ANALYZED

执行此查询时,它仅返回具有该类别 ID 的文档:categoryid:1

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

为什么是这样?以及如何强制它尊重原始categoryid:N查询词?

4

1 回答 1

3

您想要求输入的所有单词都出现在匹配的文档中吗?

var analyzer = new StandardAnalyzer(Version.LUCENE_30);
var queryParser = new QueryParser(Version.LUCENE_30, "bodytext", analyzer);

// This ensures that all terms are required.
queryParser.DefaultOperator = QueryParser.Operator.AND;

var query = queryParser.Parse("categoryid:1 foo bar");
// query = "+categoryid:1 +bodytext:foo +bodytext:bar"
于 2012-08-27T17:27:06.827 回答