4

次の方法でクエリを結合しようとしましたが、これらのクエリに (AND,OR,NOT) 演算子を追加する方法がわかりません。

BooleanQuery booleanQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("Skill_Summary", "Java"));
Query pageQueryRange = NumericRangeQuery.NewIntRange("Experience", 1, 2, true, true);
booleanQuery.Add(query1, BooleanClause.Occur.MUST);
booleanQuery.Add(pageQueryRange, BooleanClause.Occur.MUST);
var hits = searcher.Search(booleanQuery);

上記の結果booleanQuery+Skill_Summary:Java +Experience:[1 TO 2]まだ結果が得られていません

String termQueryString = "Skill_Summary:\"Java\"";
Query termQuery = queryParser.Parse(termQueryString);
Query QueryRange = NumericRangeQuery.NewIntRange("Experience", 1, 3, true, true);
Query query = termQuery.Combine(new Query[] { termQuery, QueryRange });
var hits = searcher.Search(query);
4

1 に答える 1

7

Lucene.NET を使用して と機能を実現する最も簡単な方法は、クラスを使用してクエリを結合ANDするORことです。クエリを booleanQuery に追加すると、引数を使用してクエリの処理方法を指定できます。NOTBooleanQueryOccur

var termQuery = new TermQuery(new Term("Skill_Summary", "Java"));
var booleanQuery = new BooleanQuery();

// Use 'Occur.MUST` to simulate an AND, or '+Skill_Summary:Java'
booleanQuery.Add(termQuery, Occur.MUST);

// Use 'Occur.SHOULD` to simulate an OR, or just 'Skill_Summary:Java'
booleanQuery.Add(termQuery, Occur.SHOULD);

// Use 'Occur.MUST_NOT` to simulate a NOT, or just '-Skill_Summary:Java'
booleanQuery.Add(termQuery, Occur.MUST_NOT);

あなたの例ではTermQuery、値を文字どおりに一致させようとするため、「java」や「Java」などの値と一致しない場合があります。そのためには、次のことを行う必要があります。

var booleanQuery = new BooleanQuery();

// Use QueryParser
var query1 = new QueryParser(version, "Skill_Summary", analyzer).Parse("Java");
var pageQueryRange = NumericRangeQuery.NewIntRange("Experience", 1, 2, true, true);
booleanQuery.Add(query1, BooleanClause.Occur.MUST);
booleanQuery.Add(pageQueryRange, BooleanClause.Occur.MUST);
var hits = searcher.Search(booleanQuery);
于 2013-07-02T23:14:55.393 に答える