我正在尝试在umbraco检查中设置搜索。我有两个搜索字段,材料和制造商。当我尝试使用一种材料和一种制造商进行搜索时,它将给出正确的结果。但是当尝试搜索多个时材料或制造商它没有给出结果。我的代码是
const string materialSearchFields = "material";
const string manufacturerSearchFields = "manufacturer";
if(!string.IsNullOrEmpty(Request.QueryString [“material”])) { material = Helper.StripTags(Request.QueryString [“material”]); } if(!string.IsNullOrEmpty(Request.QueryString [“manufacturer”])) { manufacturer = Helper.StripTags(Request.QueryString [“manufacturer”]); } if(!string.IsNullOrEmpty(Request.QueryString [“material”])||!string.IsNullOrEmpty(Request.QueryString [“manufacturer”])) { var query = userFieldSearchCriteria.Field(materialSearchFields,material).And()。Field(manufacturerSearchFields,manufacturer).Compile(); contentResults = contentSearcher.Search(query).ToList(); }
这里我在查询字符串中的搜索关键字是材料=铁,钢
我们如何拆分此关键字并完成搜索? 在此先感谢您的帮助......
答案 0 :(得分:0)
您正在使用AND运算符,在您的情况下,我认为您正在寻找GROUPEDOR?
我刚刚在一个旧项目中工作并从那里抓住了这个snipet(我已经根据你的需要进行了调整)。我想它会帮助你:
public IEnumerable<DynamicNode> SearchUmbraco(string[] keywords, string currentCulture)
{
// In this case I had some diferent cultures, so this sets the BaseSearchProvider to the given culture parameter. You might not need this, use your default one.
BaseSearchProvider searcher = SetBaseSearchProvider(currentCulture);
var searchCriteria = searcher.CreateSearchCriteria(BooleanOperation.Or);
var groupedQuery = searchCriteria.GroupedOr(new[] {"manufacturer", "material"}, keywords).Compile();
var searchResults = searcher.Search(groupedQuery);
// ... return IEnumerable of dynamic nodes (in this snipet case)
}
我只是在帮助器中拆分(等)关键字,并在调用此方法时将它们传递给字符串数组。
请在umbraco博客上查看此信息:http://umbraco.com/follow-us/blog-archive/2011/9/16/examining-examine.aspx