[英]Ektron solr search with smartform fields facing aproblem
我正在用ektron 9。
我从中创建了一个智能表单,并使用搜索API实现了对智能表单字段的搜索。 为此使用Ektron.Cms.Framework.Search.SearchManager类。对于单个Xpath值,它可以正常工作。
当我的智能表单具有多个具有相同Xpath的字段时,搜索api仅返回首次出现的结果。
在下面的示例中,当我使用Xpath搜索“ Book-> Title”时,搜索结果始终返回“ Hai”。
<root>
<Books>
<Book>
<Id>1
</Id>
<Title>Hai
</Title>
<Book>
<Book>
<Id>2
</Id>
<Title>Hello
</Title>
<Book>
</Books>
</root>
结果中也如何获得“ Hello”? 有单独的api处理吗? 还是有可能以单独的方式处理这种情况,例如通过指定“ / root / Books / Book [id = 1] / Title”?
有关搜索的更多详细信息,请访问: http : //documentation.ektron.com/cms400/v85/webhelp/Navigating/Search85/APISearch.htm#Major
您尚未提供正在使用的代码,因此很难看出问题出在哪里。
但是,这里有一些代码将允许您使用Solr(或Microsoft Search Server)在Ektron中的SmartForm字段中进行搜索。
这将在名为“ Path”的字段中搜索特定的SmartForm-使用XPath“ / root / Path”访问该字段。
Ektron.Cms.Framework.Search.SearchManager sManager = new Ektron.Cms.Framework.Search.SearchManager();
AdvancedSearchCriteria searchCriteria = new AdvancedSearchCriteria();
searchCriteria.ExpressionTree = SearchContentProperty.XmlConfigId.EqualTo(YourSmartFormID);
searchCriteria.ExpressionTree &= SearchSmartFormProperty.GetStringProperty("/root/Path").EqualTo(YourPathValue);
searchCriteria.PagingInfo = new PagingInfo(10, 1);
searchCriteria.ReturnProperties = new HashSet<PropertyExpression>
{
SearchContentProperty.Id,
SearchContentProperty.Title,
SearchContentProperty.QuickLink
};
SearchResponseData response = sManager.Search(criteria);
上面的示例要求Search(Solr或Search Server)返回三个属性:Id,Title和QuickLink。
如果您尚未添加Ektron.Cms.Search和Ektron.Cms.Framework.Search,则可能需要添加“ using”语句。
您可以在此站点上找到有关Ektron API的最佳参考指南。
到目前为止,Ektron 9的Solr集成对我来说还算是个问题(当然,还没有真正解决!),所以这实际上可能只是一个错误。
也就是说,当您选择/root/Books/Book
时是否会发生相同的事情,还是只返回一个结果?
如果API仅返回一个结果,则您可以尝试进行几次搜索,直到搜索结果为空为止。 通用伪代码算法为:
var i = 0;
List<item> allItems = new List<item>();
item myItem = select("(/root/Books/Book/Title)[0]");
while(myItem != null){
allItems.add(myItem);
i++;
myItem = select("(/root/Books/Book/Title)["+i+"]");
}
请记住,这是非常疯狂的低效措施。
Solr支持多值属性,因此在为smartform字段建立索引时,它们将被索引为真正的多值字段,而不是像Search Server 2010 / FAST 2010那样由分隔符分隔的值。
如果是多值字段,则必须使用SearchResponseData中以以下方式返回的SearchResultData 。
对于多值字符串属性,请使用GetValue(StringMultiValuePropertyExpression)或使用索引器[StringMultiValuePropertyExpression]
对于多值浮点属性,请使用GetValue(DecimalMultiValuePropertyExpression)或使用索引器[DecimalMultiValuePropertyExpression]
参考http://reference.ektron.com/developer/framework/Search/SearchResultData/
如果不使用MultiValuePropertyExpression,则API将返回您所看到的一组值的第一个值。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.