Включить лазурный поиск синонимов
Я пытаюсь включить карту синонимов для некоторых полей, используя следующий код:
public ActionResult ConfigFieldToUseSynonyn()
{
string searchServiceName = "xxx";
string apiKey = "123123123123123123123123123";
SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(apiKey));
var index = serviceClient.Indexes.Get("produtos");
index.Fields[2].SynonymMaps = new string[] { "marca-synonymmap" };
index.Fields[7].SynonymMaps = new string[] { "marca-synonymmap" };
serviceClient.Indexes.CreateOrUpdate(index, accessCondition: AccessCondition.IfNotChanged(index));
return Content("OK");
}
и определение с использованием следующего кода:
public ActionResult Synonym()
{
string searchServiceName = "xxx";
string apiKey = "123123123123123123123123123";
SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(apiKey));
var indexClient = serviceClient.Indexes.GetClient("produtos");
var synonymMap = new SynonymMap()
{
Name = "marca-synonymmap",
Format = "solr",
Synonyms = @"
dolve, douve => dove\n
"
};
serviceClient.SynonymMaps.CreateOrUpdate(synonymMap);
return Content("OK");
}
когда я пытаюсь найти продукты, используя "dolve", это не означает "dove". Что мне не хватает?
PS: эти поля доступны для поиска и строкового типа.
1 ответ
Решение
В определении карты синонимов '@' помечает содержимое строки как дословный литерал, и правило становится dolve, douve => dove\n, с "\n" в конце. Это правило синонимов переписывает запрос 'dolve' в 'dove\n'. Синонимы будут работать должным образом, если вы удалите префикс '@' или удалите новую строку '\ n' в определении синонима.
Nate