Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SPS2003] Moteur de recherche SPS - Web Service - Internal Servor Error

2 réponses
Avatar
Nicolas
Bonjour à tous,

J'ai indexé un très grande nombre de contenus dans SPS 2003 : plusieurs
millions.
J'ai développé ensuite une page ASPX, déployée dans le LAYOUTS/1036 du
serveur SPS, dont l'objectif est d'interroger le Web Service de recherche de
SPS pour faire une recherche simple sur les documents indexés.

Les documents indexés viennent de 2001 et ont ajoutés dans SPS 2003 un
ensemble de méta données qui me permettent de requêter dessus : j'ai donc en
plus des classiques DAV:href, dans l'espace de noms
urn:schemas.microsoft.com:htmlinfo:metainfo des propriétés supplémentaires.

Le problème est le suivant : la page ASPX fonctionne très bien dans la
grande majorité des cas, retourne bien les résultats attendus. Mais certains
mots clés, très présents dans les documents indexés, aboutissent à une
"INTERNAL SERVOR ERROR" lors de l'appel au Web Service.

Par contre, si j'appele à partir des pages standards de Sharepoint le moteur
de recherche (la page Search.aspx), après un certain temps (assez long), des
résultats sont retournés.

Un des mots clé que je recherche est un mot composé contenant le caractère
"-" comme dans "chauve-souris". En testant sur un autre serveur n'ayant pas
autant de documents indexés, il n'y a pas de problèmes. Je me demande si
cela peut avoir un impact sur la requête qu'un mot "contienne" ce caractère.

Je joins un exemple de requête que j'adresse à SPS à travers son Web Service
de recherche.

Si quelqu'un aurait une idée pour me guider, m'éclairer, ou a déjà été
confronté à ce problème, toute aide serait grandement appréciée parce que là
je sèche :-)

Cordialement,

Nicolas

PS : voilà un exemple de requête :

<?xml version="1.0" encoding="utf-8" ?>

<QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>

<Query>

<Context>

<QueryText language='en-US' type='MSSQLFT'>

<![CDATA[

select "DAV:href" ,

"DAV:contentclass",

"DAV:displayname",

"Author",

"DAV:creationdate",

"DAV:getlastmodified",

"DAV:iscollection",

"urn:schemas-microsoft-com:office:office#Title",

"urn:schemas-microsoft-com:office:office#Author",

"urn:schemas.microsoft.com:fulltextqueryinfo:description",

"urn:schemas.microsoft.com:fulltextqueryinfo:rank",

"urn:schemas.microsoft.com:fulltextqueryinfo:sourcegroup",

"urn:schemas-microsoft-com:publishing:SearchScope"

from (TABLE Portal_Content..Scope() UNION ALL TABLE
Non_Portal_Content..Scope() )

WHERE (

CONTAINS("DAV:displayname", '"test*"')

OR CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:displaytitle",
'"test*"')

OR
CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE_1",
'"test*"')

OR
CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE_1",
'"test*"')

OR CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:contents",
'"test*"')

)

ORDER BY "urn:schemas.microsoft.com:fulltextqueryinfo:rank" DESC

]]></QueryText>

<LanguagePreference>en-US</LanguagePreference>

<Requery></Requery>

</Context>

<Range>

<StartAt>1</StartAt>

<Count>100</Count>

</Range>

</Query>

</QueryPacket>

2 réponses

Avatar
Olivier
Bonjour Nicolas,

Peux tu poster ta page aspx pour qu'on puisse jeter un oeil, j'ai un
environnement de test, je pourrais essayer de reproduire ton probleme.

Olivier
"Nicolas" a écrit dans le message de
news:
Bonjour à tous,

J'ai indexé un très grande nombre de contenus dans SPS 2003 : plusieurs
millions.
J'ai développé ensuite une page ASPX, déployée dans le LAYOUTS/1036 du
serveur SPS, dont l'objectif est d'interroger le Web Service de recherche


de
SPS pour faire une recherche simple sur les documents indexés.

Les documents indexés viennent de 2001 et ont ajoutés dans SPS 2003 un
ensemble de méta données qui me permettent de requêter dessus : j'ai donc


en
plus des classiques DAV:href, dans l'espace de noms
urn:schemas.microsoft.com:htmlinfo:metainfo des propriétés


supplémentaires.

Le problème est le suivant : la page ASPX fonctionne très bien dans la
grande majorité des cas, retourne bien les résultats attendus. Mais


certains
mots clés, très présents dans les documents indexés, aboutissent à une
"INTERNAL SERVOR ERROR" lors de l'appel au Web Service.

Par contre, si j'appele à partir des pages standards de Sharepoint le


moteur
de recherche (la page Search.aspx), après un certain temps (assez long),


des
résultats sont retournés.

Un des mots clé que je recherche est un mot composé contenant le caractère
"-" comme dans "chauve-souris". En testant sur un autre serveur n'ayant


pas
autant de documents indexés, il n'y a pas de problèmes. Je me demande si
cela peut avoir un impact sur la requête qu'un mot "contienne" ce


caractère.

Je joins un exemple de requête que j'adresse à SPS à travers son Web


Service
de recherche.

Si quelqu'un aurait une idée pour me guider, m'éclairer, ou a déjà été
confronté à ce problème, toute aide serait grandement appréciée parce que



je sèche :-)

Cordialement,

Nicolas

PS : voilà un exemple de requête :

<?xml version="1.0" encoding="utf-8" ?>

<QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>

<Query>

<Context>

<QueryText language='en-US' type='MSSQLFT'>

<![CDATA[

select "DAV:href" ,

"DAV:contentclass",

"DAV:displayname",

"Author",

"DAV:creationdate",

"DAV:getlastmodified",

"DAV:iscollection",

"urn:schemas-microsoft-com:office:office#Title",

"urn:schemas-microsoft-com:office:office#Author",

"urn:schemas.microsoft.com:fulltextqueryinfo:description",

"urn:schemas.microsoft.com:fulltextqueryinfo:rank",

"urn:schemas.microsoft.com:fulltextqueryinfo:sourcegroup",

"urn:schemas-microsoft-com:publishing:SearchScope"

from (TABLE Portal_Content..Scope() UNION ALL TABLE
Non_Portal_Content..Scope() )

WHERE (

CONTAINS("DAV:displayname", '"test*"')

OR CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:displaytitle",
'"test*"')

OR



CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE_1",
'"test*"')

OR



CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE_1",
'"test*"')

OR CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:contents",
'"test*"')

)

ORDER BY "urn:schemas.microsoft.com:fulltextqueryinfo:rank" DESC

]]></QueryText>

<LanguagePreference>en-US</LanguagePreference>

<Requery></Requery>

</Context>

<Range>

<StartAt>1</StartAt>

<Count>100</Count>

</Range>

</Query>

</QueryPacket>






Avatar
Nicolas
Bonjour Olivier,

Merci d'avoir pris le temps de me répondre.

La page ASPX contient un contrôle TextBox et un bouton pour lancer la
recherche.

Dans le code behind, le click sur le bouton appele :

string spsResults = CallSearchWebService(GetRequest());
Avec une référence web vers le WebService de SPS, ici nommé QueryService.

A noter que les propriétés indexées ne sont pas mentionnées ici (un exemple
est mis en commentaire), je doute que vous ayez les mêmes sur votre
plateforme de test ;-)

Merci :-)

PS : le fichier web.config contient l'URL du Web Service de SPS
PPS : les crédits par défaut sont suffisants si la page ASPX est déployée
sur LAYOUTS, ce qui ne sera peut etre pas votre cas, il sera certainement
nécessaire de fournir au Web Service des crédits suffisants.



private void Page_Load(object sender, System.EventArgs e)
{

#region Récupération des paramètres de la page
tri = Request["tri"];
if (tri == "" || tri == null)
{
tri = "urn:schemas.microsoft.com:fulltextqueryinfo:rank";
}
order = Request["order"];
if (order == "" || order == "DESC" || order == null)
{
order = "DESC";
}
#endregion
}





/// <summary>
/// Méthode retournant la requête à envoyer au Service Web de recherche de
Sharepoint 2003
/// </summary>
/// <returns>La requête à envoyer à SPS 2003</returns>
private string GetRequest()
{
#region Creation de la requete WebDAV
string sqlTmp = "";
StringBuilder sql = new StringBuilder("select "DAV:href" ");
sql.Append(", "DAV:contentclass"");
sql.Append(", "DAV:displayname"");
sql.Append(", "Author"");
sql.Append(", "DAV:creationdate"");
// sql.Append(",
"urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE1""); //
Autant de propriétées indexées que désiré
sql.Append(", "DAV:getlastmodified"");
sql.Append(", "DAV:iscollection"");
sql.Append(", "urn:schemas-microsoft-com:office:office#Title"");
sql.Append(", "urn:schemas-microsoft-com:office:office#Author"");
sql.Append(",
"urn:schemas.microsoft.com:fulltextqueryinfo:description"");
sql.Append(", "urn:schemas.microsoft.com:fulltextqueryinfo:rank"");
sql.Append(",
"urn:schemas.microsoft.com:fulltextqueryinfo:sourcegroup"");
sql.Append(", "urn:schemas-microsoft-com:publishing:SearchScope"");
sql.Append(" from (TABLE Portal_Content..Scope() UNION ALL TABLE
Non_Portal_Content..Scope() ) ");
sql.Append(" WHERE ");

sqlTmp = GetStringWithAnd(strKeyWords,true, true);

// Ajout criteres de recherche simple
if (sqlTmp!=null && sqlTmp!="")
{
sql.Append(" ( ");
sql.Append(" CONTAINS("DAV:displayname", '"
+ sqlTmp + "')");
sql.Append(" OR ");
sql.Append("
CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:displaytitle", '"+
sqlTmp + "')");
sql.Append(" OR ");
sql.Append("
CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:MOTSCLES", '" +
sqlTmp + "')");
// sql.Append(" OR ");
// sql.Append("
CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE1",
'" + sqlTmp + "')");
sql.Append(" OR ");
sql.Append("
CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:contents", '" +
sqlTmp + "')"); // <-- d'ici vient le problème je pense
sql.Append(" ) ");
}

// Ajout des criteres de tri
if (tri != null)
{
if (tri=="urn:schemas-microsoft-com:office:office")
{
sql.Append(" ORDER BY "" + tri + "#Title" ");
}
else
{
sql.Append(" ORDER BY "" + tri + "" ");
}
}
else
{
sql.Append(" ORDER BY
"urn:schemas.microsoft.com:fulltextqueryinfo:rank" ");
}
if (order != null)
{
sql.Append(" " + order);
}
else
{
sql.Append(" DESC");
}

string QueryString = "<?xml version="1.0"
encoding="utf-8"?><QueryPacket xmlns='urn:Microsoft.Search.Query' Revision
='1000'>"
//
+"<SupportedFormats><Format>urn:Microsoft.Search.Response.Document.Document<
/Format></SupportedFormats>"
+"<Query>"
+"<Context>"
//+"<QueryText language='fr-FR' type='MSSQLFT'>"
+"<QueryText language='en-US' type='MSSQLFT'>"
+"<![CDATA["+sql.ToString()+"]]>"
+ "</QueryText>"
+"<LanguagePreference>en-US</LanguagePreference>"
+"<Requery></Requery>"
+"</Context>"
+"<Range>";

QueryString += "<StartAt>1</StartAt>";

QueryString += "<Count>100</Count></Range>"
+"</Query>"
+"</QueryPacket>";

#endregion

return QueryString;
}







/// <summary>
/// Méthode retournant le résultat traité de l'appel au Web Service de
Sharepoint 2003
/// </summary>
/// <param name="request">Requete à envoyer au serveur SPS 2003</param>
/// <returns>Xml retourné par SPS 2003</returns>
private string CallSearchWebService(string request)
{
string QueryString = request;

#region Appel du WS
QueryService queryService = new QueryService();
string urlWebService ConfigurationSettings.AppSettings["UrlWebService"];
queryService.Url = urlWebService;
queryService.RequestEncoding = Encoding.Default;
queryService.Credentials = CredentialCache.DefaultCredentials;
// Appel du WS
string result = queryService.Query(QueryString);
#endregion

return result;
}







/// <summary>
/// Méthode mettant en forme à partir des valeurs des paramètres sur l'URL
une partie de la requête WebDAV à envoyer au serveur SPS 2003
/// </summary>
/// <param name="strKeyWords">Mot clé à rechercher</param>
/// <param name="withStar">Booléen indiquant si des étoiles sont dans la
chaine d'entrée</param>
/// <param name="withAnd">Booléen indiquant si des conjonctions sont dans
la chaîne d'entrée</param>
/// <returns>Chaîne au bon format pour la requête WebDAV</returns>
protected internal static string GetStringWithAnd (string strKeyWords,
bool withStar, bool withAnd)
{
if (strKeyWords == null || strKeyWords.Length == 0)
{
return "";
}
string sqlTmp = "";
strKeyWords = strKeyWords.Trim();
if (strKeyWords != null && strKeyWords != "")
{
String[] tabKeyWords = strKeyWords.Split(' ');
for (int i=0;i<tabKeyWords.Length;i++)
{
if (i==0)
{
if (withStar)
{
sqlTmp = """ + tabKeyWords[i] + "*"";
}
else
{
sqlTmp = """+tabKeyWords[i]+""";
}
}
else
{
if (withStar)
{
if (withAnd)
{
sqlTmp = sqlTmp + " AND ""+tabKeyWords[i]+"*"";
}
else
{
sqlTmp = sqlTmp + " OR ""+tabKeyWords[i]+"*"";
}
}
else
{
sqlTmp = sqlTmp + " AND ""+tabKeyWords[i]+""";
}
}
}
}

return sqlTmp;
}





"Olivier" a écrit dans le message de
news:%
Bonjour Nicolas,

Peux tu poster ta page aspx pour qu'on puisse jeter un oeil, j'ai un
environnement de test, je pourrais essayer de reproduire ton probleme.

Olivier
"Nicolas" a écrit dans le message de
news:
> Bonjour à tous,
>
> J'ai indexé un très grande nombre de contenus dans SPS 2003 : plusieurs
> millions.
> J'ai développé ensuite une page ASPX, déployée dans le LAYOUTS/1036 du
> serveur SPS, dont l'objectif est d'interroger le Web Service de


recherche
de
> SPS pour faire une recherche simple sur les documents indexés.
>
> Les documents indexés viennent de 2001 et ont ajoutés dans SPS 2003 un
> ensemble de méta données qui me permettent de requêter dessus : j'ai


donc
en
> plus des classiques DAV:href, dans l'espace de noms
> urn:schemas.microsoft.com:htmlinfo:metainfo des propriétés
supplémentaires.
>
> Le problème est le suivant : la page ASPX fonctionne très bien dans la
> grande majorité des cas, retourne bien les résultats attendus. Mais
certains
> mots clés, très présents dans les documents indexés, aboutissent à une
> "INTERNAL SERVOR ERROR" lors de l'appel au Web Service.
>
> Par contre, si j'appele à partir des pages standards de Sharepoint le
moteur
> de recherche (la page Search.aspx), après un certain temps (assez long),
des
> résultats sont retournés.
>
> Un des mots clé que je recherche est un mot composé contenant le


caractère
> "-" comme dans "chauve-souris". En testant sur un autre serveur n'ayant
pas
> autant de documents indexés, il n'y a pas de problèmes. Je me demande si
> cela peut avoir un impact sur la requête qu'un mot "contienne" ce
caractère.
>
> Je joins un exemple de requête que j'adresse à SPS à travers son Web
Service
> de recherche.
>
> Si quelqu'un aurait une idée pour me guider, m'éclairer, ou a déjà été
> confronté à ce problème, toute aide serait grandement appréciée parce


que

> je sèche :-)
>
> Cordialement,
>
> Nicolas
>
> PS : voilà un exemple de requête :
>
> <?xml version="1.0" encoding="utf-8" ?>
>
> <QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>
>
> <Query>
>
> <Context>
>
> <QueryText language='en-US' type='MSSQLFT'>
>
> <![CDATA[
>
> select "DAV:href" ,
>
> "DAV:contentclass",
>
> "DAV:displayname",
>
> "Author",
>
> "DAV:creationdate",
>
> "DAV:getlastmodified",
>
> "DAV:iscollection",
>
> "urn:schemas-microsoft-com:office:office#Title",
>
> "urn:schemas-microsoft-com:office:office#Author",
>
> "urn:schemas.microsoft.com:fulltextqueryinfo:description",
>
> "urn:schemas.microsoft.com:fulltextqueryinfo:rank",
>
> "urn:schemas.microsoft.com:fulltextqueryinfo:sourcegroup",
>
> "urn:schemas-microsoft-com:publishing:SearchScope"
>
> from (TABLE Portal_Content..Scope() UNION ALL TABLE
> Non_Portal_Content..Scope() )
>
> WHERE (
>
> CONTAINS("DAV:displayname", '"test*"')
>
> OR CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:displaytitle",
> '"test*"')
>
> OR
>



CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE_1",
> '"test*"')
>
> OR
>



CONTAINS("urn:schemas.microsoft.com:htmlinfo:metainfo:PROPRIETE_INDEXEE_1",
> '"test*"')
>
> OR CONTAINS("urn:schemas.microsoft.com:fulltextqueryinfo:contents",
> '"test*"')
>
> )
>
> ORDER BY "urn:schemas.microsoft.com:fulltextqueryinfo:rank" DESC
>
> ]]></QueryText>
>
> <LanguagePreference>en-US</LanguagePreference>
>
> <Requery></Requery>
>
> </Context>
>
> <Range>
>
> <StartAt>1</StartAt>
>
> <Count>100</Count>
>
> </Range>
>
> </Query>
>
> </QueryPacket>
>
>
>
>