Заранее благодарим за чтение и любую помощь, которую вы можете предоставить!
Я пытаюсь выполнить поиск в нескольких почтовых ящиках. Мне нужно найти все сообщения, в которых упоминаются некоторые слова И не упоминаются другие слова, ЗА ИСКЛЮЧЕНИЕМ тех слов, которые есть в обоих списках. Это сложный поиск. Я не знаю, как изменить логику языка запросов по ключевым словам, чтобы добиться этого.
Я понимаю, что команда поиска будет сложной, и ее выполнение займет много времени. Это хорошо.
Пример:
Найдите предметы, в которых упоминается Тедди.
Мне нужны предметы, в которых упоминается Рузвельт. Я хочу предметы, в которых упоминается mugwump
Я хочу предметы, в которых упоминаются Rough Riders
Я не хочу ничего, где упоминается Франклин Рузвельт.
НО если в сообщении упоминаются и Тедди, и Франклин, мне это нужно.
Я ничего не хочу со словом "новая сделка" в теме
Я не хочу ничего, где упоминается Трумэн.
Я хочу использовать подстановочные знаки.
Поиск «Рузвельта» обязательно приведет к появлению «Франклина». Я не могу в одностороннем порядке исключить "Франклина", не пропустив "Тедди".
Мой текущий запрос:
New-MailboxSearch -SearchQuery "Teddy* OR mugwump* OR Roosevelt* OR 'Rough Riders*' NOT ((Franklin* NOT Teddy*) OR Truman* OR subject:'new-deal')"
Выполните вышеуказанный поиск. Получено 9500 просмотров. Я нашел несколько электронных писем с «бредом» и «франклином пирсом». Что-то здесь не так.
Когда я запускал «Тедди * ИЛИ Рузвельт *», я получил 10 000 просмотров.
Когда я запустил «Тедди * ИЛИ Рузвельт * НЕ (Франклин * НЕ Тедди *)», я получил 9500 просмотров. Так я думал, что это сработало?
В случае, если это была проблема в скобках, я также попробовал «(Тедди * ИЛИ Рузвельт *) НЕ (Франклин * НЕ Тедди *)». Я все еще получил 9500 просмотров.
Заключение в скобки положительных поисковых запросов не имело значения.
Затем я попробовал: «(Тедди * ИЛИ Рузвельт *) НЕ (Франклин *). Я все еще получил 9 500 просмотров. В результатах были результаты Франклина, так что что-то здесь действительно не так.
Это проблема с цитатой? Я не могу найти четкую документацию по одинарным кавычкам и двойным кавычкам в отношении того, как они влияют на операторы поиска и круглые скобки.
В документации Microsoft KQL об этом не упоминается. Большинство запросов Google для KQL относится к Sharepoint, которая имеет другие наклоны (и возможности) по сравнению с Exchange. Ряд обращений к Exchange на самом деле относится к AQS.
Я не нашел хороших примеров сложного KQL-запроса, подобного моему, с вложенными условиями поиска ...
Я попытался заменить все одинарные кавычки на двойные. Мои результаты упали до 4000. Это был просто -EstimateOnly, у меня не было возможности запустить фактическое задание и проверить результаты.
1. Будет ли двойное отрицание "НЕ (Франклин * НЕ Тедди *) преодолеть себя?"
2. Есть ли другой способ сказать «включите это, если оно не включает и то»?
3. Есть ли лучший способ расположить скобки?
4. Я что-то не так делаю с цитатами?
Спасибо за вашу помощь!
Я ПРИГОДИЛ РЕШЕНИЕ. Я хотел поделиться своим последним вопросом, а также некоторыми важными уроками, которые я усвоил в процессе.
УРОК 1. КАК РЕАЛИЗАЦИЯ НЕСКОЛЬКИХ ЗАПИСЕЙ
В запросе можно использовать только одну скобку. Однако вы можете вложить в этот запрос еще один набор круглых скобок.
Пример: -SearchQuery "(a OR b) AND (c OR d)"
ВЫВЕДЕТ ОШИБКУ
Пример: -SearchQuery "a AND (b AND (c OR d))"
РАБОТАЕТ
Я не знаю, можно ли использовать несколько скобок внутри родительского элемента или вложить третий уровень ниже. Не нужно было в этом разбираться.
УРОК 2. НЕСКОЛЬКО И / ИЛИ ОПЕРАНДОВ
Признаться, я так и не понял, влияет ли порядок операндов на то, как SearchQuery анализирует результаты. Мой последний запрос в основном состоял из операторов ИЛИ, поэтому я не стал копаться в нем.
Пример: -SearchQuery "a AND b OR c AND d"
- это эквивалентно «(a AND b) OR (c AND d)»?
- или это эквивалентно «a AND (b OR c) AND d»?
Я не знаю. Не нужно было в этом разбираться.
Что следует иметь в виду будущим читателям.
УРОК 3. ЗАВЕРШЕНИЕ - УСЛОВИЯ ПОИСКА С {__} '__' "__"
Вы можете использовать {}, '' или "" для обертывания поискового запроса.
-SearchQuery {wordone OR wordtwo OR "word three"}
-SearchQuery 'wordone OR wordtwo OR "word three"'
-SearchQuery "wordone OR wordtwo OR 'word three'"
Я думаю, что могут быть некоторые особенности того, как каждая оболочка анализирует буквальные термины с кавычками / двойными кавычками или подстановочными знаками внутри запроса. У меня была некоторая неуверенность в моих живых тестах, которая заставила меня так думать.
К тому времени, когда я создал тестовый почтовый ящик с небольшим набором тестовых сообщений для экспериментов, я остановился на одинарных кавычках с двойными кавычками внутри. Это то, что я использовал, когда выяснил, что работает, поэтому больше не возвращался для дальнейших экспериментов.
ТЕСТОВЫЙ ПОЧТОВЫЙ ЯЩИК
Я создал тестовый почтовый ящик. Я отправил этому почтовому ящику 16 писем.
Тема каждого электронного письма была «(от 01 до 16) (хорошо или плохо)».
Тело каждого электронного письма содержало поисковые запросы в различных шаблонах, основанных на реальных примерах.
В желаемых шаблонах электронных писем в теме использовалось «Хорошо», а в нежелательных - «Плохие».
Пример: Тема: «05 Good», Body: «Roosevelt mugwump»
Пример: Тема: «07 Bad», тело: «Франклин Рузвельт»
Пример: Тема: «08 Хорошо», тело: «Тедди Франклин Рузвельт»
Я знал, что если в результате моего запроса были получены какие-либо «Плохие» сообщения электронной почты, это не удалось.
Если в результате моего запроса не было получено электронное письмо с оценкой «Хорошо», я знал, что это не удалось.
Я использовал эту среду, чтобы выяснить логику и отсечь нежелательные результаты.
ФИНАЛЬНЫЙ -ПОИСК
Используя этот тестовый почтовый ящик и уроки выше, я построил следующий запрос:
New-MailboxSearch -Name 2019Feb7test13 -Force -SourceMailboxes user1,user2,user3 -StartDate 1/1/1890 -EndDate 1/1/1940 -SearchQuery 'teddy* OR roosevelt* OR mugwump* OR "rough riders*" NOT (franklin* NOT (teddy* OR mugwump* OR "rough riders")) NOT "new-deal" NOT truman*' -TargetMailbox discoveryresults -TargetFolder 2019Feb7test13 -ExcludeDuplicateMessages $true -LogLevel Full -StatusMailRecipients me
(Мой настоящий запрос был немного сложнее, но этот пример иллюстрирует мое решение.)
Нарушая этот -SearchQuery, мы получаем:
Соответствует любому из: teddy, roosevelt, mugwump, грубые райдеры.
Не совпадает: new-deal, truman
Не совпадает: Франклин, когда он также не подходит к тедди, болвану, грубым наездникам
Первое условие подбирает всех «рузвельтов», включая «франклина рузвельта».
Третье условие отбрасывает все, что связано с «франклином», без плюшевых, бестолковых или грубых наездников.
ЗАПАСНОЙ ПЛАН
Если бы я не смог найти решение этой проблемы, мой план резервного копирования состоял бы из двух частей.
1. Выполните поиск без какой-либо фильтрации. Только положительные условия ИЛИ. Отправляйте результаты во временный почтовый ящик, а не в ящик обнаружения.
2. Запустите Search-Mailbox на этом временном почтовом ящике. Найдите все элементы, соответствующие условиям, которые мне не нужны, и используйте переключатель -DeleteContent.
Это, вероятно, сработало бы, но потребуются дополнительные обручи. Я гораздо больше доволен своим решением.
Согласно вашему запросу, отфильтруйте «элементы, в которых упоминается Тедди Рузвельт», включая «элементы, в которых упоминаются и Тедди, и Франклин». вы можете упростить командлет, как показано ниже:
New-MailboxSearch -SearchQuery 'Teddy* OR mugwump* OR Roosevelt* OR Rough Riders* NOT (Truman* OR subject:"new-deal")'