Изучите поиск фразC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Изучите поиск фраз

Сообщение Anonymous »

Я использую Examine для поиска в списке пользователей Microsoft Graph. У меня возникли проблемы с возвратом ожидаемых результатов для фразового поиска. Поиск по запросу «Контроллер проекта» возвращает все записи, содержащие «Проект» или «Контроллер». Когда мне нужны только записи, содержащие «Контроллер проекта».
Мой существующий запрос:

Код: Выделить всё

    public async Task Search(string query = "")
{
string[] terms = query.Split(' ');

_allUsers = await GetAllUsers();

List matchingUsers = new List();

if (_examineManager.TryGetIndex("ColleaguesIndex", out _colleaguesIndex))
{
var searchFields = new[] { "FirstName", "LastName", "DisplayName", "StreetAddress", "JobTitle", "Department", "BusinessUnit", "OfficeLocation", "City", "State", "PostalCode", "BusinessPhones", "MobilePhone", "CompanyName" };
var results = _colleaguesIndex.Searcher.CreateQuery(defaultOperation: BooleanOperation.Or)
.GroupedOr(searchFields, query.MultipleCharacterWildcard()).Or()
.GroupedOr(searchFields, query.Escape()).Or()
.GroupedOr(searchFields, terms)
.Execute();

var resultsID = results.Select(r => r.Id);

matchingUsers = _allUsers.Where(u => resultsID.Contains(u.OnPremisesSamAccountName)).ToList();
}

return matchingUsers;
}
Результирующий запрос:

Код: Выделить всё

{
(

FirstName     : project controller*
LastName      : project controller*
DisplayName   : project controller*
StreetAddress : project controller*
JobTitle      : project controller*
Department    : project controller*
BusinessUnit  : project controller*
OfficeLocation: project controller*
City          : project controller*
State         : project controller*
PostalCode    : project controller*
BusinessPhones: project controller*
MobilePhone   : project controller*
CompanyName   : project controller*
)
(
FirstName     : "Project controller"
LastName      : "Project controller"
DisplayName   : "Project controller"
StreetAddress : "Project controller"
JobTitle      : "Project controller"
Department    : "Project controller"
BusinessUnit  : "Project controller"
OfficeLocation: "Project controller"
City          : "Project controller"
State         : "Project controller"
PostalCode    : "Project controller"
BusinessPhones: "Project controller"
MobilePhone   : "Project controller"
CompanyName   : "Project controller"
)
(

FirstName     : project
FirstName     : controller
LastName      : project
LastName      : controller
DisplayName   : project
DisplayName   : controller
StreetAddress : project
StreetAddress : controller
JobTitle      : project
JobTitle      : controller
Department    : project
Department    : controller
BusinessUnit  : project
BusinessUnit  : controller
OfficeLocation: project
OfficeLocation: controller
City          : project
City          : controller
State         : project
State         : controller
PostalCode    : project
PostalCode    : controller
BusinessPhones: project
BusinessPhones: controller
MobilePhone   : project
MobilePhone   : controller
CompanyName   : project
CompanyName   : controller
)
}
При поиске «Контроллер проекта» я получаю 68 результатов. Есть 14 пользователей с должностью = "Контроллеры проекта".
Я попробовал изменить .GroupedOr(searchFields, terms) на .GroupedAnd(searchFields, terms).
Я попробовал изменить .GroupedOr(searchFields, query.Escape()) на .GroupedAnd(searchFields, query.Escape())
В обоих случаях я получаю 0 результатов. Проблема с изменением их на GroupedAnd заключается в том, что я думаю, что он проверяет, ВСЕ ли поля в моем searchFields = "Project Controller".
Я упростил свой запрос в целях тестирования и запустил это:< /p>

Код: Выделить всё

var results = _colleaguesIndex.Searcher.CreateQuery().GroupedOr(searchFields, query.Escape()).Execute();
Результирующий запрос:

Код: Выделить всё

LuceneQuery: {+(FirstName:"Project Controller" LastName:"Project Controller" DisplayName:"Project Controller" StreetAddress:"Project Controller" JobTitle:"Project Controller" Department:"Project Controller" BusinessUnit:"Project Controller" OfficeLocation:"Project Controller" City:"Project Controller" State:"Project Controller" PostalCode:"Project Controller" BusinessPhones:"Project Controller" MobilePhone:"Project Controller" CompanyName:"Project Controller")}
...и получил 0 результатов. Этого я не могу объяснить. Я ожидал там 14 результатов. Излишне говорить, что я озадачен тем, как добиться фразового поиска по группе полей.

Подробнее здесь: https://stackoverflow.com/questions/788 ... ase-search
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Изучите поиск фраз
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • «Изучите Python на собственном горьком опыте», упражнение 17: дополнительные вопросы.
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Изучите PHP и базу данных (MYSQL) [закрыто]
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Изучите обработку событий в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • «ValueError: слишком много значений для распаковки» в «Изучите Python: трудный путь», пример 13
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»