Ich erkunde die neue Sitecore.ContentSearch
API "LINQ zu Sitecore" in Sitecore 7. Es ist mein Verständnis, dass Sitecore empfiehlt, die neue API LINQ über die vorhandene API Sitecore.Search
zu verwenden, jedoch habe ich Mühe, selbst die einfachsten Abfragen auszuführen. B. die folgende Suchanfrage: "hello world"
.Wie führt man die Suche nach mehreren Begriffen in der ContentSearch-API von Sitecore 7 durch?
Mit der API Sitecore.Search
werden die Begriffe "Hallo Welt" normalerweise durch eine QueryParser
übergeben, die zu Dokumenten führen würde, die mit dem Wort "Hallo" ODER "Welt" übereinstimmen. Dokumente, die beide Begriffe enthalten, würden höher bewertet als solche mit nur einem.
Wie führt man dieselbe Abfrage mit LINQ aus?
Hier ist, was ich versucht habe:
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));
}
UPDATE
Ich bin überzeugt, dass ich etwas wirklich einfach fehle. Sicherlich wurde bei all der Arbeit, die in die neue Such-API einfloss, dieser einfache Anwendungsfall nicht übersehen ... oder?
Als Workaround habe ich versucht, die Standard-sitecore_web_index
mit dem vorhandenen SearchManager zu öffnen, jedoch funktioniert dies nicht.
Leider musste ich auf die vorhandene API zurückgreifen, bis ich das herausfinden kann. Ich werde diese Frage mit meinen Ergebnissen aktualisieren.
UPDATE 2
Ich fand die Sitecore.ContentSearch.Utilities.LinqHelper
Klasse, die das Problem teilweise gelöst werden. Sie können es verwenden, um dynamisch eine Abfrage zu erstellen, die ähnlich einer in Lucene.Net ist, jedoch sind seine Optionen begrenzt und es fügt ein bisschen Leistungsoverhead hinzu.
Dieser Blogartikel könnte helfen http://www.sitecore.net/Community/Technical-Blogs/Getting-to-Know-Sitecore/Posts/2013/06/Using-Luke-to-Understand-Sitecore- 7-Search.aspx? KeepThis = wahr & TB_iframe = wahr & height = 650 & width = 850 – geedubb
@geedubb Danke für den Link! Das LinqScratchPad-Tool wird definitiv nützlich sein. Trotzdem kann ich immer noch kein Beispiel für eine ODER-Abfrage finden, die irgendeine Art von Abfrageparsing verwendet. Sie zeigen nur anhand einfacher Kriterien, wie zum Beispiel '_templatename ==" X "'. Obwohl das nützlich ist, versuche ich einfach, an dieser Stelle eine gewöhnliche Site-Suche zu implementieren. –