Sitecore 7の新しいSitecore.ContentSearch
「LINQ to Sitecore」API を検討しています。Sitecore が既存のSitecore.Search
API よりも新しい 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の に似たクエリを動的に作成できますが、オプションが制限されており、パフォーマンスのオーバーヘッドが少し追加されます。