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