Нечеткий поиск с использованием Lucene с Azure Search. NET SDK - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь использовать нечеткий поиск в сочетании с частичным поиском и повышением соответствия, используя Azure Поиск. NET API.

Это то, что у меня сейчас есть, оно пока не работает:

// Create SearchIndexClient
searchIndexClient= new SearchIndexClient("searchServiceName", "indexName", [credentials]);
// Set search params
var searchParameters = new SearchParameters(
                includeTotalResultCount: true,
                queryType: QueryType.Full);
// Set search string
string searchText = "elise*~^10";
// perform search.
var result = searchIndexClient.Documents.SearchAsync(searchText, searchParameters);

В этом индексе есть запись со свойством Name со значением 'Elyse'. Эта запись не найдена с использованием вышеуказанного кода. Если я изменю searchText на "elyse~", запись будет возвращена.

Я также не смогу заставить это работать в Azure проводнике поиска на веб-портале (у этой вещи есть имя?).

Что мне здесь не хватает? Я думаю, что это может быть проблема с побегом, но я не уверен, как это исправить. Я просмотрел кучу документации и вопросов о переполнении стека в topi c, но ни один из них не дал полного ответа о том, как сделать нечеткий поисковый вызов с использованием. NET SDK. Поэтому, пожалуйста, ответьте в виде полного кода, если это возможно. Большое спасибо заранее.

1 Ответ

1 голос
/ 17 марта 2020

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

В документации имеется примечание:

Вы не можете использовать * или? символ в качестве первого символа поиска. Анализ текста не выполняется для поисковых запросов с подстановочными знаками. Во время запроса условия запроса с подстановочными знаками сравниваются с проанализированными терминами в поисковом индексе и расширяются.

Это означает, что указание нечеткого Оператор после подстановочного знака не оказывает никакого влияния, и результат такой же, как и его не применять. В вашем примере elise*~^10 эффективно elise*^10 и, следовательно, не соответствует "elyse".

Одним из способов express, как и в запросе, является использование оператора OR. elise~^10 OR elise*^10. Это вернет do c, содержащий "elyse" из-за 1-го предложения.

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