繁体   English   中英

带有问题的smartform字段的Ektron Solr搜索

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM