Lucene.netベースの検索エンジンを使用してEPiServerWebサイトで作業しています。
特定のpageTypeIdを持つページのみを検索するためのクエリがあります。今度は反対のことをしたいのですが、特定のpageTypeIdではないページだけを見つけたいのです。それは可能ですか?
これは、pageTypeId 1、2、または3のページのみを検索するクエリを作成するためのコードです。
public BooleanClause GetClause()
{
var booleanQuery = new BooleanQuery();
var typeIds = new List<string>();
typeIds.Add("1");
typeIds.Add("2");
typeIds.Add("3");
foreach (var id in this.typeIds)
{
var termQuery = new TermQuery(
new Term(IndexFieldNames.PageTypeId, id));
var clause = new BooleanClause(termQuery,
BooleanClause.Occur.SHOULD);
booleanQuery.Add(clause);
}
return new BooleanClause(booleanQuery,
BooleanClause.Occur.MUST);
}
代わりに、「4」ではないpageTypeIdを持つページを検索するクエリを作成したいと思います。
「SHOULD」と「MUST」を「MUST_NOT」に置き換えてみましたが、うまくいきませんでした。
迅速に返信してくれた@goalie7960に感謝します。これは、選択したページタイプ以外のものを検索するための改訂されたコードです。この検索には、pageTypeIdが「1」、「2」、または「3」のドキュメントを除くすべてのドキュメントが含まれます。
public BooleanClause GetClause()
{
var booleanQuery = new BooleanQuery();
booleanQuery.Add(new MatchAllDocsQuery(),
BooleanClause.Occur.MUST);
var typeIds = new List<string>();
typeIds.Add("1");
typeIds.Add("2");
typeIds.Add("3");
foreach (var typeId in this.typeIds)
{
booleanQuery.Add(new TermQuery(
new Term(IndexFieldNames.PageTypeId, typeId)),
BooleanClause.Occur.MUST_NOT);
}
return new BooleanClause(booleanQuery,
BooleanClause.Occur.MUST);
}