1

私は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をご覧ください。

4

3 に答える 3

0

使用しているコードを提供していないため、どこが間違っているのかを確認するのは困難です。

ただし、Solr (または Microsoft Search Server) を使用して Ektron の SmartForm フィールドを検索できるようにするコードを次に示します。

これは、XPath "/root/Path" を使用してアクセスされる "Path" というフィールドで特定の SmartForm を検索します。

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);

上記の例では、検索 (Solr または検索サーバー) に、Id、Title、および QuickLink の 3 つのプロパティを返すように要求しています。

Ektron.Cms.Search および Ektron.Cms.Framework.Search の「using」ステートメントをまだ追加していない場合は、追加する必要がある可能性があります。

Ektron API の最適なリファレンス ガイドは、このサイトです。

于 2013-08-07T09:21:57.880 に答える
0

Ektron 9 の solr 統合は、これまでのところかなりバグが多かったため (確かに、まだ実際にはリリースされていません!)、これは実際には単なるバグである可能性があります。

そうは言っても、 を選択しても同じことが起こりますか/root/Books/Book、それとも結果が 1 つしか返されませんか?

API が 1 つの結果しか返さない場合は、結果が空になるまで何度か検索を試みることができます。一般的な擬似コード アルゴリズムは次のようになります。

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

これは非常に非効率的であることを覚えておいてください。

于 2013-08-08T20:26:00.920 に答える
0

Solr は多値属性をサポートしているため、スマートフォーム フィールドのインデックスを作成すると、Search Server 2010/FAST 2010 の場合のように区切り記号で区切られた値ではなく、真の多値フィールドとしてインデックスが作成されます。

複数値フィールドの場合、SearchResponseData から、次の方法で返されたSearchResultDataを使用する必要があります。

多値文字列プロパティの場合、GetValue(StringMultiValuePropertyExpression) またはインデクサー [StringMultiValuePropertyExpression] を使用します。

多値浮動小数点プロパティの場合、GetValue(DecimalMultiValuePropertyExpression) またはインデクサー [DecimalMultiValuePropertyExpression] を使用します。

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

MultiValuePropertyExpression を使用しない場合、API は表示されている値のセットの最初の値を返します。

お役に立てれば。

于 2014-01-02T20:29:26.800 に答える