Comment puis-je effectuer une MOSS FullText Sql Query et personnes filtrer les résultats par les compétences propriété gérée?

StackOverflow https://stackoverflow.com/questions/2293066

Question

Je ne parviens pas à un MOSS FullTextSqlQuery en essayant de filtrer les résultats des personnes sur les compétences de la propriété géré à l'aide du prédicat CONTAINS. Permettez-moi de démontrer:

Une requête sans filtre renvoie le résultat attendu:

SELECT AccountName, Skills
from scope()
where freetext(defaultproperties,'+Bob')
And ("scope" = 'People')

Résultat

Total Rows: 1
ACCOUNTNAME: MYDOMAIN\Bob
SKILLS: Numchucks | ASP.Net | Application Architecture

Mais quand j'ajouter un prédicat CONTAINS, je ne reçois plus le résultat escompté:

SELECT AccountName, Skills
from scope()
where freetext(defaultproperties,'+Bob')
And ("scope" = 'People')
And (CONTAINS(Skills, 'Numchucks'))

Résultat

Total Rows: 0

Je me rends compte que je peux y arriver en utilisant le prédicat SOME ARRAY, mais je voudrais savoir pourquoi cela ne fonctionne pas avec le prédicat CONTAINS pour la propriété des compétences. J'ai réussi en utilisant le prédicat CONTAINS avec une propriété rampé personnalisé qui est indiqué comme « Multi-évalué ». La propriété des compétences (bien qu'il semble être à valeurs multiples) n'est pas indiquée en tant que telle sur la page Propriétés rampé dans le site d'administration SSP:

http: ///ssp/admin/_layouts/schema.aspx ConsoleView = crawledPropertiesView & category = Les gens

Quelqu'un a des idées?

Était-ce utile?

La solution

Alors, avec l'aide de Mark Cameron (Microsoft SharePoint Support Developer), je me suis dit que certaines propriétés gérées doivent être activé pour la recherche en texte intégral en utilisant l'API modèle d'objet ManagedProperty en définissant la propriété FullTextQueriable true. Ci-dessous la méthode qui a résolu ce problème pour moi. Il pourrait être inclus dans une application console ou une application agricole ou Web scope récepteur de fonction.

    using Microsoft.Office.Server;
    using Microsoft.Office.Server.Search.Administration;

    private void EnsureFullTextQueriableManagedProperties(ServerContext serverContext)
    {
        var schema = new Schema(SearchContext.GetContext(serverContext));
        var managedProperties = new[] { "SKILLS", "INTERESTS" };
        foreach (ManagedProperty managedProperty in schema.AllManagedProperties)
        {
            if (!managedProperties.Contains(managedProperty.Name.ToUpper()))
                continue;

            if (managedProperty.FullTextQueriable)
                continue;

            try
            {
                managedProperty.FullTextQueriable = true;
                managedProperty.Update();
                Log.Info(m => m("Successfully set managed property {0} to be FullTextQueriable", managedProperty.Name));
            }
            catch (Exception e)
            {
                Log.Error(m => m("Error updating managed property {0}", managedProperty.Name), e);
            }
        }
    }

Autres conseils

SELECT AccountName, Skills
from scope()
where freetext(defaultproperties,'+Bob')
And ("scope" = 'People')
And (CONTAINS(Skills, 'Numchucks*'))

utiliser le * à la fin.

Vous avez également quelques options pour essayer:

  

La liste suivante identifie   éléments de requête supplémentaires qui sont   uniquement pris en charge avec la syntaxe de recherche SQL   en utilisant la classe FullTextSqlQuery:

     

FREETEXT ()

     

CONTAINS ()

     

comme

Source

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top