1

私のすべてのLucene.net(2.9.2)ドキュメントには、次の2つのフィールドがあります。

  • categoryid
  • 本文

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 に答える