3
我正在使用基於Lucene.net的搜索引擎在EPiServer網站上工作。Lucene.net - 如何創建否定查詢,即。搜索不包含東西的對象
我有一個查詢只查找某個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);
}
我想,而不是創建一個查詢,我尋找的是有一個pageTypeId是網頁不是「4」。
我試着簡單地用「MUST_NOT」替換「SHOULD」和「MUST」,但那不起作用。
感謝@ 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);
}
非常好,MatchAllDocs是我從我的查詢中遺漏的。謝謝! –
當然!再次感謝。 –