Ektron solr搜索面向问题的smartform字段

时间:2013-08-06 07:08:41

标签: ektron

我正在使用ektron 9。

我创建了一个智能,并使用搜索API实现了对智能表单字段的搜索。 对于那个使用Ektron.Cms.Framework.Search.SearchManager类。当单个Xpath值时,它工作正常。

当我的智能表单有多个具有相同Xpath的字段时,搜索api仅返回第一次出现的结果。

在下面的示例中,当我使用Xpath“/ root / Books / Book / Title”搜索Book-> Title时,搜索结果总是返回“Hai”。

<root>
<Books>
<Book>
<Id>1
</Id>
<Title>Hai
</Title>
<Book>
<Book>
<Id>2
</Id>
<Title>Hello
</Title>
<Book>
</Books>
</root>

我怎么能在结果中得到“你好”?是否有任何单独的api来处理这个? 或者是否可以单独处理这种情况,例如通过指定“/ root / Books / Book [id = 1] / Title”?

有关搜索的详细信息,请查看: http://documentation.ektron.com/cms400/v85/webhelp/Navigating/Search85/APISearch.htm#Major

3 个答案:

答案 0 :(得分:0)

您尚未提供正在使用的代码,因此很难看出您出错的地方。

但是,这里有一些代码可以让您使用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的最佳参考指南是this site

答案 1 :(得分:0)

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+"]");
}

请记住,这非常疯狂。

答案 2 :(得分:0)

Solr支持多值属性,因此在索引smartform字段时,它们会被索引为真正的多值字段,而不是像Search Server 2010 / FAST 2010那样的分隔符分隔值。

如果是多值字段,则必须使用以下方式返回的 SearchResultData 来自SearchResponseData。

对于多值字符串属性的情况 GetValue(StringMultiValuePropertyExpression)或使用索引器[StringMultiValuePropertyExpression]

对于多值浮点属性的情况 GetValue(DecimalMultiValuePropertyExpression)或使用索引器[DecimalMultiValuePropertyExpression]

参考 http://reference.ektron.com/developer/framework/Search/SearchResultData/

如果一个人不使用MultiValuePropertyExpression,API将返回您所看到的值集的第一个值。

希望这有帮助。