Мой существующий запрос:
Код: Выделить всё
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
)
}
Я попробовал изменить .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")}
Подробнее здесь: https://stackoverflow.com/questions/788 ... ase-search