Comment utiliser les affinements et les filtres d'affinement des requêtes de mots clés de recherche SharePoint 2013 ?

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

Question

Je travaille sur l'exigence selon laquelle je dois écrire un code géré côté client en C# pour extraire les résultats de recherche basés sur la requête en texte libre, puis je devrais être en mesure d'affiner le résultat en fonction des affinements de requête par mot clé et des filtres d'affinement.Jusqu'à présent, la requête en texte libre fonctionne correctement, mais je ne suis pas en mesure de passer les affinements et les filtres d'affinement pour obtenir des résultats de recherche spécifiques.Ci-dessous, j'ai mis mon code sur lequel je travaille.

        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();
        }

Lorsque j'exécute le code ci-dessus, je n'obtiens aucun résultat, mais j'ai vérifié qu'il existe des résultats pour les conditions de filtre sur la page du centre de recherche.

enter image description here

Y a-t-il une erreur dans la façon dont j'essaie d'utiliser KeywordQuery.Refiners et KeywordQuery.RefinementFilers ?

PS - Si je passe "test filetype:pdf" comme texte de requête, il renvoie le résultat attendu comme dans la page de résultats de recherche.Mais j'espérais utiliser les propriétés du raffineur KeywordQuery pour faire de même.

MISE À JOUR -

Suite à la réponse de Mikael, j'ai également pu comprendre comment extraire les détails du raffineur du résultat de la recherche.

La première étape consiste à indiquer au moteur de recherche quels affinements vous souhaitez obtenir.keywordQuery.Refiners = "FileType"; puis à l'exécution de la recherche, vérifiezresults.Value[1].ResultRows pour les détails du raffineur.

Notez qu'il s'agit du deuxième tableau de résultats qui contient les détails du raffinement.

Était-ce utile?

La solution

Vos filtres doivent être:

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

où vous ajoutez la propriété que vous souhaitez filtrer dans le filtre, pas seulement la valeur.L'échantillon ci-dessus pourrait ne pas être le meilleur qu'il existe un et entre DOC et DOCX.Si vous voulez ou suivez, suivez l'exemple ci-dessous en utilisant FQL.

Un bon exercice est d'utiliser Fiddler ou similaire lorsque vous cliquez sur un raffineur dans l'interface utilisateur et voyez ce que la requête XML ressemble à la soumission.Lorsque vous cliquez sur le raffineur "Word", ce filtre est ajouté à la requête:

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

Comme vous pouvez le constater, c'est une requête formatée FQL, et vous pouvez créer quelque chose de similaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top