我有类似以下的结构
类别(靴子)
---- itemsForSale(addidas)
类别(袜子)
---- itemsForSale(长)
其中Boots是类别doctype的名称,而Adidas是itemsForSale doctype等的名称。
现在,如果网站的访问者从复选框选项中选择Boots类别,我会将ID传递给搜索页面
访问者还可以通过关键字和最低,最高价格进行搜索。
关键字min,max price选项有效,我只是无法使搜索工作,因此它只显示父项下的项目,即Addidas。
我有以下代码:
ExamineIndex
<add Name="categoryPath"/>
OnGatheringNodeData
private void SetCustomSearchParameters(object sender, IndexingNodeDataEventArgs e)
{
var path = e.Fields["path"];
path = path.Replace(",", " ");
e.Fields.Add("categoryPath", path);
}
我的搜索结果如下:
//TODO needs to be fixed so that checkbox search can be done
query = searchCriteria.Range("bidPrice", paddedLower, paddedHigher, true, true).And().Field("categoryPath",searchCategory).Or().Field("nodeName",searchCategory.Fuzzy()).Or().Field("nodeName", q.Fuzzy()).Or().Field("description", q.Fuzzy());
但没有结果返回,任何人都可以看到我做错了什么,我重建了索引,但没有运气,当在后台搜索时,我的categoryPath没有显示。
我已阅读以下http://www.attackmonkey.co.uk/blog/2011/12/limiting-an-examine-search-to-the-current-site
------------- ----------------索引集
<IndexSet SetName="AuctionSearch" IndexPath="~/App_Data/ExamineIndexes/AuctionSearch">
<IndexAttributeFields>
<add Name="id" />
<add Name="nodeName"/>
<add Name="updateDate" />
<add Name="writerName" />
<add Name="nodeTypeAlias" />
</IndexAttributeFields>
<IndexUserFields>
<add Name="description"/>
<add Name="image"/>
<add Name="name"/>
<add Name="bidPrice" EnableSorting="true" Type="DOUBLE"/>
<add Name="searchBidPrice" EnableSorting="true" Type="DOUBLE"/>
<add Name="numberOfBids"/>
<add Name="category"/>
<add Name="itemsForSale"/>
<add Name="bidEndDateTime"/>
<add Name="categoryPath"/>
</IndexUserFields>
<IncludeNodeTypes>
<add Name="itemsForSale" />
</IncludeNodeTypes>
</IndexSet>
答案 0 :(得分:0)
我认为你想要使用的是.GroupedOr
,你试过这样的事吗?
query = searchCriteria.Range("bidPrice", paddedLower, paddedHigher, true, true)
.And().Field("categoryPath",searchCategory)
.And().GroupedOr(
new string[] { "nodeName", "nodeName", "description"}
, new[]{ searchCategory.Fuzzy(), q.Fuzzy(), q.Fuzzy() }
)
;
答案 1 :(得分:0)
如果有其他人遇到此问题,所有在线示例都会将“路径”显示为“路径”或创建我在我的情况下执行的别名,但它不起作用
就我而言,只有在使用__Path
时才能过滤父母下的子项工作代码
query = searchCriteria.Range("bidPrice", paddedLower, paddedHigher, true, true).And().Field("__Path", programParent.MultipleCharacterWildcard()).And().GroupedOr(new[] {"description", "nodename"}, q.Fuzzy()).Compile();