Come utilizzare SharePoint 2013 Cerca Parole chiave Richiesta Rifinitori di query e rifinmentatori di riferimento?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/76563

Domanda

Sto lavorando al requisito in cui ho bisogno di scrivere un codice gestito lato client in C # per tirare i risultati di ricerca in base alla query di testo gratuita e quindi dovrebbe essere in grado di perfezionare il risultato in base ai filtri di query e ai filtri di raffinatezza della parola chiave. Finora la query di testo gratuita funziona bene, ma non sono in grado di superare i filtri dei raffinatori e di raffinatezza per ottenere specifici risultati di ricerca. Sotto ho messo il mio codice che sto lavorando.

        string _url = "http://hostname/sites/sitename";
        string _queryText = "test";

        using (ClientContext clientContext = new ClientContext(_url))
        {
            var keywordQuery = new KeywordQuery(clientContext)
            {
                QueryText = _queryText
                ,Refiners = "FileType"
            };

            var refinementFilters = new string[] { "doc, docx" };
            for (var i = 0; i < refinementFilters.Length; i++)
            {
                keywordQuery.RefinementFilters.Add(refinementFilters[i]);
            }

            SearchExecutor searchExecutor = new SearchExecutor(clientContext);
            ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery);
            clientContext.ExecuteQuery();

            Console.WriteLine("result..");
            Console.WriteLine("result count: {0}", results.Value[0].ResultRows.Count()); 
            foreach (var resultRow in results.Value[0].ResultRows)
            {
                Console.WriteLine("{0}: {1}", resultRow["Title"], resultRow["Path"]);
            }
            Console.WriteLine("Press enter to exit...");
            Console.ReadLine();
        }
.

Quando eseguo il codice sopra riportato non ottengo risultati, ma ho verificato che ci sono risultati per le condizioni del filtro dalla pagina Center di ricerca.

Inserire l'immagine Descrizione qui

C'è qualche errore nel modo in cui sto cercando di usare la parola chiaveQuery.refiners e keywordquery.refinementfilers?

PS - Se passisco "Test FileType: PDF" come testo di query restituisce il risultato atteso come nella pagina dei risultati della ricerca. Ma speravo di utilizzare le proprietà del raffinamento della parola chiave per fare lo stesso.

Aggiornamento -

Seguendo la risposta di Mikael Sono stato anche in grado di capire come estrarre i dettagli del raffinamento dal risultato della ricerca.

Primo passo è lasciare che il motore di ricerca sappia quali raffinatori ti piace ottenere keywordQuery.Refiners = "FileType"; THEN On Execution of Search, controllare results.Value[1].ResultRows per i dettagli del raffinamento.

Nota la sua tabella dei secondi risultati che contiene i dettagli del raffinamento.

È stato utile?

Soluzione

I tuoi filtri dovrebbero essere:

var refinementFilters = new string[] { "doc, docx" };
for (var i = 0; i < refinementFilters.Length; i++)
{
   keywordQuery.RefinementFilters.Add("FileType:" + refinementFilters[i]);
}
.

Dove si aggiunge la proprietà che si desidera filtrare come parte del filtro, non solo il valore.Il campione di cui sopra potrebbe non essere il migliore in quanto c'è un e tra DOC e DOCX.Se vuoi o quindi seguire il campione qui sotto usando FQL.

Un buon esercizio è quello di utilizzare Fiddler o simili quando fai clic su un raffinatore nell'interfaccia utente e vedere cosa appare la query XML al momento della presentazione.Quando si fa clic sulla "parola" il raffinamento di questo filtro viene aggiunto alla query:

FileType:or(equals("docx"),equals("doc"),equals("docm"),equals("dot"),equals("nws"),equals("dotx"))
.

Come puoi vedere questa è una query formattata FQL e puoi creare qualcosa di simile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top