Sto utilizzando Sitecore 7.2 con un indice Lucene personalizzato e Linq. Devo dare un peso aggiuntivo (massimo) alle corrispondenze esatte.Frase corrispondente all'API ContentSearch Sitecore
Esempio: un utente cerca "da qualche parte sopra l'arcobaleno"
risultati dovrebbero includere elementi che contengono la parola "arcobaleno", ma gli elementi che contengono il termine esatto e l'intero "da qualche parte sopra l'arcobaleno" dovrebbe essere data peso massimo Visualizzeranno agli utenti i risultati migliori. Ad esempio, un oggetto contenente l'intera frase dovrebbe pesare più pesantemente di un oggetto che contiene la parola "arcobaleno" 100 volte.
Potrei dover gestire la logica di classifica al di fuori dell'API di ContentSearch raccogliendo "corrispondenze di frase" separatamente da "corrispondenze di caratteri jolly", e va bene.
Ecco il mio codice esistente, troncato per brevità. Il codice funziona, ma le corrispondenze esatte delle frasi non sono trattate come ho descritto.
using (var context = ContentSearchManager.GetIndex("sitesearch-index").CreateSearchContext())
{
var pred = PredicateBuilder.False<SearchResultItem>();
pred = pred
.Or(i => i.Name.Contains(term)).Boost(1)
.Or(i => i["Field 1"].Contains(term)).Boost(3)
.Or(i => i["Field 2"].Contains(term)).Boost(1);
IQueryable<SearchResultItem> query = context.GetQueryable<SearchResultItem>().Where(pred);
var hits = query.GetResults().Hits;
...
}
Come posso eseguire esatta corrispondenza a frase ed è possibile con l'API Sitecore.ContentSearch.Linq?
Cerca di utilizzare l'utilizzo di PreparedQuery anziché di PredicateBuilder. – Anton
Sembra che PreparedQuery provenga dall'API Sitecore.Search in Sitecore 6, non dall'API ContentSearch in 7. Il mio indice personalizzato corrente è definito in un file di configurazione standalone nel nodo. SearchManager.GetIndex() (utilizzato in v6) non è a conoscenza del mio indice. Sembra che dovrei cambiare tutto per usare l'API v6. Sperando in un'alternativa. –
betitall