Как включить фонетические результаты при использовании ключевых слов?
-
16-10-2019 - |
Вопрос
Я не могу получить пользовательский запрос ключевых слов, чтобы вернуть фонетические результаты при поиске людей.
У меня быстрый поиск установлен, и если я выполняю поиск людей (в центре быстрого поиска) для «Джона», я получаю ожидаемые результаты, содержащие как «Джон», так и «Джон». Однако, если я построю запрос ключевого слова (как показано ниже), я возвращаю результаты только для «Джона».
Какие-либо предложения?
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);
}
}
Решение
я нашел блог где кто -то ссылался на тот факт, что вам нужно установить RankingModelId
на ключевом слова. Это работает для образца кода, который вы видите выше, а также для веб -части CoresearchResults, которую я создал.
Вот пример кода:
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);
}
}
Другие советы
Как насчет изменения значения результатов на «FastSearch»?
Для тех, кто пытается сделать это через веб -сервис, элемент, который вам нужен, назван RelevanceModel
вместо RankingModelId
Я застрял, пытаясь заставить его работать через jQuery и Spservices Пока я не нашел Microsoft.Search.Query Schema ссылка и обнаружили имя элемента RelevanceModel
При совершении звонков веб -службы. В ссылке не упоминается EnableNicknames
или же EnablePhonetic
, но я обнаружил, что им также нужно было заставить это работать.
Вот XML -запрос, с которым я закончил:
<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>