Jak przeprowadzić wyszukiwanie wielu terminów w Sitecore 7 ContentSearch API?
Badam noweSitecore.ContentSearch
Interfejs API „LINQ to Sitecore” w Sitecore 7. Rozumiem, że Sitecore zaleca korzystanie z nowego interfejsu API LINQ w stosunku do istniejącegoSitecore.Search
API, jednak staram się wykonywać nawet najprostsze zapytania.
Weźmy na przykład następujące zapytanie:"hello world"
.
UżywającSitecore.Search
API, terminy „witaj świecie” zazwyczaj byłyby przekazywane przezQueryParser
co spowoduje, że dokumenty będą pasować do słowa „witaj” LUB „świat”. Dokumenty zawierające oba terminy byłyby oceniane wyżej niż te z jednym.
Jak wykonać to samo zapytanie za pomocą LINQ?
Oto, co próbowałem:
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));
}
AKTUALIZACJA
Jestem przekonany, że brakuje mi czegoś naprawdę prostego. Z całą pracą związaną z nowym interfejsem API wyszukiwania ten prosty przypadek użycia nie został pominięty ... prawda?
Jako obejście próbowałem otworzyć domyślnesitecore_web_index
jednak przy użyciu istniejącego SearchManager to nie działa.
Niestety, musiałem uciekać się do istniejącego API, dopóki nie zdołam tego wyjaśnić. Na pewno zaktualizuję to pytanie moimi ustaleniami.
AKTUALIZACJA 2
znalazłemSitecore.ContentSearch.Utilities.LinqHelper
klasa, która częściowo rozwiązuje problem. Możesz go użyć do dynamicznego budowania zapytania podobnego do aBooleanQuery
w Lucene.Net jego opcje są jednak ograniczone i zwiększają nieco wydajność.