6

Sitecore 7の新しいSitecore.ContentSearch「LINQ to Sitecore」API を検討しています。Sitecore が既存のSitecore.SearchAPI よりも新しい LINQ API を使用することを推奨していることは理解していますが、最も単純なクエリでさえ実行するのに苦労しています。

たとえば、次の検索クエリを考えてみましょう: "hello world".

APIを使用するSitecore.Searchと、通常、「hello world」という用語が を介して渡され、QueryParser「hello」または「world」という単語に一致するドキュメントが生成されます。両方の用語を含むドキュメントは、1 つだけのドキュメントよりもスコアが高くなります。

LINQ を使用してこの同じクエリを実行するにはどうすればよいでしょうか?

これが私が試したことです:

var results = SearchContext.GetQueryable<MyResultItem>();

var terms = searchTerm.Split(' ');

// Not supported exception
results = results.Where(r => terms.Any(t => r.Content.Contains(r)));

// Close, but performs an "AND" between terms, and does not appear
// to score documents properly
foreach (var term in terms)
{
    results = results.Where(r => r.Content.Contains(t));
}

アップデート

本当に単純なものが欠けていると確信しています。確かに、新しい検索 API に費やされたすべての作業で、この単純な使用例が見落とされていませんでした... よね?

回避策として、既存の SearchManager を使用してデフォルトを開こうとsitecore_web_indexしましたが、これは機能しません。

残念ながら、これを理解できるまで、既存の API に頼らなければなりませんでした。この質問を私の調査結果で必ず更新します。

更新 2

Sitecore.ContentSearch.Utilities.LinqHelper問題を部分的に解決するクラスを見つけました。BooleanQueryこれを使用して、Lucene.Netの に似たクエリを動的に作成できますが、オプションが制限されており、パフォーマンスのオーバーヘッドが少し追加されます。

4

3 に答える 3

22

私が試したすべての述語ビルダーは機能しませんでしたが、Sitecore 7PredicateBuilderには、トリックを実行する独自の述語ビルダーが付属しています。

using Sitecore.ContentSearch;
using Sitecore.ContentSearch.Linq;
using Sitecore.ContentSearch.SearchTypes;
using Sitecore.ContentSearch.Utilities;
// Sitecore 7 (Update 1+): using Sitecore.ContentSearch.Linq.Utilities;

...

var index = ContentSearchManager.GetIndex("sitecore_web_index");
using (var context = index.CreateSearchContext())
{
    var predicate = PredicateBuilder.True<SearchResultItem>();
    foreach (var t in term.Split(' '))
    {
        var tempTerm = t;
        predicate = predicate.Or(p => p.Content.Contains(tempTerm));
    }

    var results = context.GetQueryable<SearchResultItem>().Where(predicate).GetResults();

    ...
}
于 2013-07-10T21:06:09.087 に答える
1

これは、sitecore ではなく linq に関連していると思います。

私はこれをテストしませんが、この記事を見てください http://www.albahari.com/nutshell/predicatebuilder.aspx

このドキュメントも参照できますhttp://sdn.sitecore.net/upload/sitecore7/70/developer's_guide_to_item_buckets_and%20search_sc7-a4.pdf

于 2013-07-09T07:48:22.730 に答える