none
FullTextSqlQuery Order By et limite de 100 résultats RRS feed

  • Question

  • Bonjour,

    J'ai un soucis avec une personnalisation de recherche MOSS utilisant l'objet FullTextSqlQuery

    Voici mon code objet (avec la requête sql définie dans "query"):

    FullTextSqlQuery qry = new FullTextSqlQuery(this.serverctx);
    qry.ResultTypes = ResultType.RelevantResults;
    qry.TrimDuplicates = false;
    qry.KeywordInclusion = KeywordInclusion.AnyKeyword;
    qry.QueryText = query;
    qry.RowLimit = 0; // j'ai également essayé de mettre un grand nombre comme 500 000 sans changement

    qry.SiteContext = new Uri(SPContext.Current.Site.Url);

    ResultTableCollection resultTbls;

    resultTbls = qry.Execute();

     

    Et voici ce que contient ma requête "query":

    "SELECT TitleProperty, DepartementProperty, WorkPhoneProperty, OfficeProperty, PictureUrlProperty, AccountNameProperty, UrlProperty, FirstName, LastName, UniteProperty, PreferredName FROM Scope() WHERE \"Scope\"='Personnes' "

     

    Jusque là tout va bien, il me retourne tous mes profils utilisateurs (165 profils).

    Maintenant, je veux trier les résultats par ordre alphabétique avec la nouvelle requête (en rajoutant un Order By column):

    "SELECT TitleProperty, DepartementProperty, WorkPhoneProperty, OfficeProperty, PictureUrlProperty, AccountNameProperty, UrlProperty, FirstName, LastName, UniteProperty, PreferredName FROM Scope() WHERE \"Scope\"='Personnes' Order By LastName, FirstName "

    Et là ça ne va plus: il ne me retourne plus que les 100 premiers résultats et ignore les autres.

     

    Je suis tombé par hasard sur les pages suivantes:

    http://blogs.msdn.com/varun_malhotra/archive/2008/08/16/moss-search-with-order-by-clause-doesn-t-return-all-results.aspx

    L'ajout de la clé dans le registre a pour effet de rajouter les profils ayant des Noms et Prénoms vides mais le nombre de résultats reste à 100 (du coup il y a de nouveaux résultats placés en premier mais qui remplacement les résultats qui débordent de la limite de 100)

    Je suis également tombé sur la question:

    http://social.technet.microsoft.com/Forums/en/sharepointsearch/thread/bcd9d2fb-d94e-45c9-893a-e1b18974a347

    Mais je n'arrive pas à comprendre comment il a résolu son problème. Et de toute façon, je n'ai pas de CONTAINS dans ma requête.

     

    Quelqu'un a-t-il déjà eu ce problème?

    Merci :)

    vendredi 9 avril 2010 15:01

Réponses

  • Je n'ai au final pas résolu ce problème.

    J'effectue donc un tri sur mes résultats après les avoir reçus. (En utilisant le tri de la DataTable stockant mes résultats).

    Voici le code:

    FullTextSqlQuery qry = new FullTextSqlQuery(this.serverctx);
    qry.ResultTypes = ResultType.RelevantResults;
    qry.TrimDuplicates = false;
    qry.KeywordInclusion = KeywordInclusion.AnyKeyword;
    qry.QueryText = query;
    qry.RowLimit = 0; // j'ai également essayé de mettre un grand nombre comme 500 000 sans changement

    qry.SiteContext = new Uri(SPContext.Current.Site.Url);

    ResultTableCollection resultTbls;

    resultTbls = qry.Execute();

    DataTable relResultsTbl = new DataTable();
    relResultsTbl.TableName = "Relevant Results";
    DataSet ds = new DataSet("resultsset");
    ds.Tables.Add(relResultsTbl);
    ds.Load(resultTbls, LoadOption.OverwriteChanges, relResultsTbl);

    // Copie des résultats ordonnés via une DataTable temporaire

    DataTable foundRows = ds.Tables[0].Select(string.Empty, triPertinence + "LastName, FirstName").CopyToDataTable();

    for (int index = 0; index < foundRows.Rows.Count; index++)
    {
        ds.Tables[0].Rows[index].BeginEdit();
        ds.Tables[0].Rows[index].ItemArray = foundRows.Rows[index].ItemArray;
        ds.Tables[0].Rows[index].EndEdit();
        ds.Tables[0].Rows[index].AcceptChanges();
    }

    ds.Tables[0].AcceptChanges();
    foundRows.Clear();

    • Marqué comme réponse Marc TRAN lundi 19 avril 2010 09:57
    lundi 19 avril 2010 09:57