Sto esplorando la nuova API "LINQ to Sitecore" Sitecore.ContentSearch
in Sitecore 7. Sono a conoscenza del fatto che Sitecore consiglia di utilizzare la nuova API LINQ sull'API esistente Sitecore.Search
, tuttavia, sto facendo fatica a eseguire anche le query più semplici.Come eseguire la ricerca di più termini nell'API ContentSearch di Sitecore 7?
Prendiamo ad esempio la seguente query di ricerca: "hello world"
.
Utilizzando l'API Sitecore.Search
, i termini "ciao mondo" normalmente passano attraverso un QueryParser
che risulterebbe in documenti corrispondenti alla parola "ciao" O "mondo". I documenti contenenti entrambi i termini sarebbero valutati più alti di quelli con uno solo.
Come si esegue questa stessa query utilizzando LINQ?
Ecco che cosa ho provato:
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
sono convinto che mi manca qualcosa di veramente semplice. Sicuramente con tutto il lavoro che è andato nella nuova API di ricerca, questo semplice caso d'uso non è stato trascurato ... giusto?
Come soluzione alternativa, ho provato ad aprire il valore predefinito sitecore_web_index
utilizzando il SearchManager esistente, tuttavia, questo non funziona.
Sfortunatamente, ho dovuto ricorrere all'API esistente finché non riesco a capirlo. Sarò sicuro di aggiornare questa domanda con le mie conclusioni.
UPDATE 2
ho trovato classe Sitecore.ContentSearch.Utilities.LinqHelper
che risolve parzialmente il problema. È possibile utilizzarlo per creare dinamicamente una query simile a uno BooleanQuery
in Lucene.Net, tuttavia, le sue opzioni sono limitate e aggiunge un po 'di overhead delle prestazioni.
Questo articolo del blog può aiutare http://www.sitecore.net/Community/Technical-Blogs/Getting-to-Know-Sitecore/Posts/2013/06/Using-Luke-to-Understand-Sitecore- 7-Search.aspx? KeepThis = true & TB_iframe = true & height = 650 & width = 850 – geedubb
@geedubb Grazie per il collegamento! Lo strumento LinqScratchPad sarà sicuramente utile. Detto questo, non riesco ancora a trovare un esempio di una query in stile "OR" o di uno che utilizza qualsiasi tipo di analisi delle query. Mostrano solo come abbinare in base a criteri semplici, come '_templatename ==" X "'. Mentre ciò è utile, sto semplicemente cercando di implementare una ricerca del sito run-of-the-mill a questo punto. –