Como realizar a pesquisa de vários termos na API do Sitecore 7 ContentSearch?
Eu estou explorando o novoSitecore.ContentSearch
API "LINQ to Sitecore" no Sitecore 7. Acredito que a Sitecore recomenda o uso da nova API LINQ sobre o existenteSitecore.Search
API, no entanto, estou me esforçando para executar até mesmo a mais simples das consultas.
Tomemos por exemplo a seguinte consulta de pesquisa:"hello world"
.
Usando oSitecore.Search
API, os termos "hello world" normalmente seriam passados por umQueryParser
o que resultaria em documentos correspondentes à palavra "olá" OU "mundo". Documentos contendo os dois termos seriam pontuados mais altos do que aqueles com apenas um.
Como se executa essa mesma consulta usando o LINQ?
Aqui está o que eu tentei:
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));
}
ATUALIZAR
Estou convencido de que estou sentindo falta de algo realmente simples. Certamente, com todo o trabalho que foi feito na nova API de pesquisa, esse caso de uso simples não foi esquecido ... certo?
Como solução alternativa, tentei abrir o padrãositecore_web_index
usando o SearchManager existente, no entanto, isso não funciona.
Infelizmente, tive que recorrer à API existente até conseguir descobrir isso. Eu vou ter certeza de atualizar esta questão com minhas descobertas.
ATUALIZAÇÃO 2
Eu encontrei oSitecore.ContentSearch.Utilities.LinqHelper
classe que parcialmente resolve o problema. Você pode usá-lo para criar dinamicamente uma consulta semelhante a umBooleanQuery
No Lucene.Net, no entanto, as opções são limitadas e adicionam um pouco de sobrecarga de desempenho.