Umbraco检查,嵌套多个布尔运算符

Umbraco检查,嵌套多个布尔运算符,umbraco,examine,Umbraco,Examine,我试图将这些过滤器添加到一个已经相当复杂的Umbraco-Examine查询中,并且已经看到不能将API与原始lucene查询混合使用,因此整个过程可能必须原始完成,我试图避免这种情况,因为它是一个具有相当多维度的查询生成器 这种事情在API中可能发生吗?我看到了GroupedOr/和,但我看不出这是如何削减它的,因为这些是“In”类型查询中的独占/包含sql AND ((_nodeTypAlias: 'Event' AND eventDate:(0xx TO 0xx)) OR (NOT _no

我试图将这些过滤器添加到一个已经相当复杂的Umbraco-Examine查询中,并且已经看到不能将API与原始lucene查询混合使用,因此整个过程可能必须原始完成,我试图避免这种情况,因为它是一个具有相当多维度的查询生成器

这种事情在API中可能发生吗?我看到了
GroupedOr/和
,但我看不出这是如何削减它的,因为这些是“In”类型查询中的独占/包含sql

AND ((_nodeTypAlias: 'Event' AND eventDate:(0xx TO 0xx)) OR (NOT _nodeTypAlias: 'Event'))
AND ((_nodeTypAlias: 'Article' AND postDate:(0xx TO 0xx)) OR (NOT _nodeTypAlias: 'Article'))

以最出色的成绩实现了这一目标

产出:

+((++NodeTypAlias:Event+eventDate:[42920到79444])(-NodeTypAlias:Event))

并将其传递到翁布拉科检查:

ISearchCriteria criteria = searcher.CreateSearchCriteria();
var filter = criteria.RawQuery(q);
var results = searcher.Search(filter, MaxResults);
运算符应
翻译为“或”,而
必须
翻译为AND(Lucene术语)

为了便于参考,您还需要在收集节点数据时将新的可比较日期字段写入索引:

    private void ExamineEvents_GatheringNodeData(object sender, IndexingNodeDataEventArgs e, UmbracoHelper umbraco)
    {
        if (e.IndexType != IndexTypes.Content) return;

        try
        {
            var content = new Node(e.NodeId);
            if (e.Fields.ContainsKey("postDate"))
                e.Fields.Add("comparablePostDate", DateTime.Parse(e.Fields["postDate"]).ToString("yyyyMMddHHmm00000"));
            if (e.Fields.ContainsKey("eventDate"))
                e.Fields.Add("comparableEventDate", DateTime.Parse(e.Fields["eventDate"]).ToString("yyyyMMddHHmm00000"));


            AddAuthor(e.Fields, content);
        }
        catch (Exception ex)
        {
            LogHelper.Error(this.GetType(), "Error in Umbers custom ExamineEvents_GatheringNodeData: ", ex);
            //does nowt!
            throw;
        }
    }
    private void ExamineEvents_GatheringNodeData(object sender, IndexingNodeDataEventArgs e, UmbracoHelper umbraco)
    {
        if (e.IndexType != IndexTypes.Content) return;

        try
        {
            var content = new Node(e.NodeId);
            if (e.Fields.ContainsKey("postDate"))
                e.Fields.Add("comparablePostDate", DateTime.Parse(e.Fields["postDate"]).ToString("yyyyMMddHHmm00000"));
            if (e.Fields.ContainsKey("eventDate"))
                e.Fields.Add("comparableEventDate", DateTime.Parse(e.Fields["eventDate"]).ToString("yyyyMMddHHmm00000"));


            AddAuthor(e.Fields, content);
        }
        catch (Exception ex)
        {
            LogHelper.Error(this.GetType(), "Error in Umbers custom ExamineEvents_GatheringNodeData: ", ex);
            //does nowt!
            throw;
        }
    }