Azure Search Highlight Частичное совпадение

Я включил Подсветку Хита, и она работает хорошо для целых совпадений слов. Но мы добавляем подстановочный знак в конце каждого слова, указанного пользователем, и выделение не работает с частичными совпадениями. Мы получаем результаты обратно, но объект.Highlights имеет значение null, поэтому для частичного сопоставления подсветка недоступна.

Вот как мы настраиваем параметры поиска:

var parameters = new SearchParameters
{
    Filter = newFilter,
    QueryType = QueryType.Full,
    Top = recordsPerPage,
    Skip = skip,
    SearchMode = SearchMode.Any,
    IncludeTotalResultCount = true,
    HighlightFields = new List<string> { "RESULT" },
    HighlightPreTag = "<font style=\"color:blue; background-color:yellow;\">",
    HighlightPostTag = "</font>"
};
return parameters;

response = indexClient.Documents.Search<SearchResultReturn>(query, parameters);

Вот пример нашей строки запроса: ("the") the*^99.95

Идея в том, что мы ищем точную строку, указанную пользователем (несколько слов), а затем делаем поиск по шаблону для каждого указанного слова.

Таким образом, для приведенного выше примера мы получаем все результаты, которые содержат "the" и "*", но только слова "the" имеют выделение. "Они", "Там" и т. Д. Не имеют никакого выделения, даже если "Они" - единственная подходящая запись в результате ("the" не было в результате).

Опять же, запрос возвращает правильные результаты, просто выделение не работает для частичных совпадений.

Есть ли какие-то другие настройки, которые мне нужны, чтобы иметь возможность выделить частичные совпадения?

2 ответа

Спасибо за сообщение о проблеме.

К сожалению, в поиске Azure известно ограничение, которое иногда не выделяется для широкого поиска с использованием подстановочных знаков. Выделение - это самостоятельный процесс после поиска. Как только найдены соответствующие документы, маркер просматривает поисковый индекс для всех терминов, которые соответствуют критериям подстановочного знака, и использует эти термины при выделении найденных документов. Для широких поисковых запросов с подстановочными знаками, таких как * (или *), маркер использует только самые верхние N наиболее значимых терминов в зависимости от их частоты в корпусе по соображениям производительности. В вашем примере "они" и "там" не включены в основные моменты, вероятно, из-за их появления в большинстве документов.

Так как это ограничение в запросах с подстановочными знаками, одним из обходных путей является предварительная обработка индекса, чтобы избежать выдачи запросов с подстановочными знаками / префиксами. Пожалуйста, взгляните на пользовательский анализ ( https://docs.microsoft.com/en-us/rest/api/searchservice/custom-analyzers-in-azure-search). Вы можете, например, использовать toNenfilter для edgeNgram и хранить префиксы слов в индексе и сгенерируйте регулярный запрос с префиксом (без оператора '*')

Надеюсь это поможет. Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.

Nate

Спасибо за ответ, но, похоже, это не проблема, похоже, это проблема с функцией Boosting, которую я использую при поиске.

Когда я убрал функцию повышения, то частичная подсветка работала, как и ожидалось. Когда я добавил функцию повышения обратно в частичную подсветку перестала работать. Можете ли вы проверить, что это ошибка?

Вот моя функция повышения:

"scoringProfiles":[{"name":"PreRiskBoost",
                    "text":null,"functions":     
                     [{"fieldName":"PreRiskCount", 
                      "freshness":null, 
                      "interpolation":"linear",
                      "magnitude":{"boostingRangeStart":1,
                                   "boostingRangeEnd":99,
                                   "constantBoostBeyondRange":true},
                      "distance":null,
                      "tag":null,
                      "type":"magnitude","boost":10}],
                      "functionAggregation":"sum"}],
                      "defaultScoringProfile":"PreRiskBoost"

Знаете ли вы, почему функция Boosting предотвращает частичную подсветку?

Другие вопросы по тегам