Pregunta

Parece que no puedo obtener una consulta de palabras clave personalizada para devolver los resultados fonéticos al buscar personas.

Tengo una búsqueda rápida instalada, y si hago una búsqueda de personas (en el centro de búsqueda rápida) para "Jon", obtengo los resultados esperados que contienen "Jon" y "John". Sin embargo, si construyo una consulta de palabras clave (como se muestra a continuación) solo devuelve los resultados para "Jon".

¿Alguna sugerencia?

using (SPSite spSite = new SPSite("http://localhost"))
{   
    // get the query and settings service proxy
    SearchQueryAndSiteSettingsServiceProxy settingsProxy = spSite.WebApplication.Farm.ServiceProxies.GetValue<SearchQueryAndSiteSettingsServiceProxy>();
    // get the search service application proxy by name
    SearchServiceApplicationProxy proxy = settingsProxy.ApplicationProxies.GetValue<SearchServiceApplicationProxy>("FAST Query SSA");

    KeywordQuery keywordQuery = new KeywordQuery(proxy);
    keywordQuery.RowLimit = 100;
    keywordQuery.EnablePhonetic = true;
    keywordQuery.EnableNicknames = true;
    keywordQuery.ResultsProvider = SearchProvider.SharepointSearch;

    keywordQuery.ResultTypes = ResultType.RelevantResults;

    keywordQuery.SelectProperties.Add("firstname");
    keywordQuery.SelectProperties.Add("lastname");

    keywordQuery.QueryText = "jon";

    ResultTableCollection fullTextSearchResults = keywordQuery.Execute();

    if (fullTextSearchResults.Exists(ResultType.RelevantResults))
    {               
        ResultTable searchResult = fullTextSearchResults[ResultType.RelevantResults];
        Console.WriteLine("Total Rows: " + searchResult.TotalRows) ;
        Console.WriteLine("Total Row Count: " + searchResult.RowCount);
        Console.WriteLine("Total Rows Including Duplicates: " + searchResult.TotalRowsIncludingDuplicates);
        Console.WriteLine("Is Total Rows Exact: " + searchResult.IsTotalRowsExact);
    }
}   
¿Fue útil?

Solución

encontré un blog donde alguien hizo referencia al hecho de que necesita establecer el RankingModelId en la palabra clave. Esto funciona para el código de muestra que ve arriba, así como para la parte web de coreSearchResults personalizada que he creado.

Aquí está el código de ejemplo:

using (SPSite spSite = new SPSite("http://localhost"))
{   
    SearchQueryAndSiteSettingsServiceProxy settingsProxy = spSite.WebApplication.Farm.ServiceProxies.GetValue<SearchQueryAndSiteSettingsServiceProxy>();
    SearchServiceApplicationProxy proxy = settingsProxy.ApplicationProxies.GetValue<SearchServiceApplicationProxy>("FAST Query SSA");

    KeywordQuery keywordQuery = new KeywordQuery(proxy);
    keywordQuery.RowLimit = 100;
    keywordQuery.EnablePhonetic = true;
    keywordQuery.EnableNicknames = true;
    keywordQuery.ResultsProvider = SearchProvider.SharepointSearch;

    keywordQuery.RankingModelId = "D9BFB1A1-9036-4627-83B2-BBD9983AC8A1";       

    keywordQuery.ResultTypes = ResultType.RelevantResults;

    keywordQuery.SelectProperties.Add("firstname");
    keywordQuery.SelectProperties.Add("lastname");

    keywordQuery.QueryText = "jon";

    ResultTableCollection fullTextSearchResults = keywordQuery.Execute();

    if (fullTextSearchResults.Exists(ResultType.RelevantResults))
    {               
        ResultTable searchResult = fullTextSearchResults[ResultType.RelevantResults];
        Console.WriteLine("Total Rows: " + searchResult.TotalRows) ;
        Console.WriteLine("Total Row Count: " + searchResult.RowCount);
        Console.WriteLine("Total Rows Including Duplicates: " + searchResult.TotalRowsIncludingDuplicates);
        Console.WriteLine("Is Total Rows Exact: " + searchResult.IsTotalRowsExact);
    }
}   

Otros consejos

¿Qué hay de cambiar el valor de resultados de resultados a "FastSearch"?

Para cualquiera que intente hacer esto a través de un servicio web, el elemento que necesitará se nombra RelevanceModel en vez de RankingModelId

Estaba atrapado tratando de hacer que funcionara a través de jQuery y Spservices Hasta que encontré el Microsoft.search.Query Schema referencia y descubrió que el nombre del elemento es RelevanceModel Al hacer llamadas de servicio web. La referencia no menciona EnableNicknames o EnablePhonetic, pero descubrí que también eran necesarios para que esto funcione.

Aquí está la consulta XML con la que terminé:

<QueryPacket Revision="1000">'
    <Query>
        <Context>
            <QueryText language="en-US" type="STRING">Jon scope:"People" </QueryText>
        </Context>
        <SupportedFormats Format="urn:Microsoft.Search.Response.Document.Document" />
        <ResultProvider>SharepointSearch</ResultProvider>
        <EnableNicknames>true</EnableNicknames>
        <EnablePhonetic>true</EnablePhonetic>
        <RelevanceModel>d9bfb1a1-9036-4627-83b2-bbd9983ac8a1</RelevanceModel>
        <Properties>
            ...
            <Property name="FirstName" />
            <Property name="LastName" />
        </Properties>
    </Query>
</QueryPacket>
Licenciado bajo: CC-BY-SA con atribución
scroll top