gpt4 book ai didi

c# - 使用 Sitecore 8 内容搜索 API 的复杂查询

转载 作者:行者123 更新时间:2023-11-30 18:23:26 26 4
gpt4 key购买 nike

我正在尝试编写一个 Linq 以使用 sitecore 内容搜索 API 遍历 ID 列表,但它会抛出此异常

Invalid Method Call Argument Type: Field - FieldNode - Field: supplier_categories_sm - DCP.Common.Models.Shared.CategoryItem[]. Only constant arguments is supported.

   //The search item class
public class EventSupplierItem : BaseSearchItem
{
[IndexField("supplier_categories_sm")]
public CategoryItem[] SupplierCategories { get; set; } //maped to multilist
}
//I have wrote custom converter to map the multilist to that item
public class CategoryItem
{
[SitecoreId]
[IndexField("_group")]
[TypeConverter(typeof(IndexFieldIDValueConverter))]
public virtual ID Id { set; get; }

[IndexField("name")]
public string Name { get; set; }
}

创建过滤谓词以获取结果的代码:

  var EventCategoryID = new ID(EventSupplierFilters.SupplierCategory);
FilterOR = FilterOR.Or(x => x.SupplierCategories.Select(a => a.Id).Contains(EventCategoryID));
filter = filter.And(FilterOR.Predicate);
results = queryable.Filter(filter.Predicate);
executedResults = results.ToList();

我也尝试过使用 .Any 而不是 .Select 但仍然抛出相同的异常,因为 Sitecore 内容搜索 linq 不支持 AnySelect 在表达式中。有谁知道处理此问题的最佳方法是什么?

最佳答案

在 Fortis 源代码中有一个如何执行此操作的示例。有 2 种扩展方法,.ContainsAnd.ContainsOr 获取 Id 列表以与另一个字段进行比较。

这是来源:https://github.com/Fortis-Collection/fortis/blob/master/Fortis/Search/SearchExtensions.cs

您可能可以根据需要自定义它。

在使用中我们调用:

var query = searchContext.GetQueryable<IItemWrapper>().ContainsOr(x => x.FieldName, arrayValues);

关于c# - 使用 Sitecore 8 内容搜索 API 的复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com