# Булева оптимизация
Полнотекстовые запросы автоматически оптимизируются, когда опция поиска `boolean_simplify` (или соответствующая [глобальная настройка](../../Server_settings/Searchd.md#boolean_simplify)) установлена в `1` (включено по умолчанию). Некоторые из изменений, внесённых этой оптимизацией, включают:

* Лишние скобки: `((A | B) | C)` становится `(A | B | C)`; `((A B) C)` становится `(A B C)`
* Лишние AND NOT: `((A !N1) !N2)` становится `(A !(N1 | N2))`
* Общий NOT: `((A !N) | (B !N))` становится `((A | B) !N)`
* Общий составной NOT: `((A !(N AA)) | (B !(N BB)))` становится `(((A | B) !N) | (A !AA) | (B !BB))`, если стоимость вычисления N больше суммы стоимости вычисления A и B
* Общий подтермин: `((A (N | AA)) | (B (N | BB)))` становится `(((A | B) N) | (A AA) | (B BB))`, если стоимость вычисления N больше суммы стоимости вычисления A и B
* Общие ключевые слова: `(A | "A B"~N)` становится `A`; `("A B" | "A B C")` становится `"A B"`; `("A B"~N | "A B C"~N)` становится `("A B"~N)`
* Общая фраза: `("X A B" | "Y A B")` становится `("("X"|"Y") A B")`
* Общий AND NOT: `((A !X) | (A !Y) | (A !Z))` становится `(A !(X Y Z))`
* Общий OR NOT: `((A !(N | N1)) | (B !(N | N2)))` становится `(((A !N1) | (B !N2)) !N)`
Обратите внимание, что оптимизация запросов требует времени процессора, поэтому в некоторых случаях для очень простых запросов или вручную оптимизированных запросов вы можете получить лучшие результаты, отключив оптимизацию с помощью `boolean_simplify=0`.

Запросы типа `-dog`, которые потенциально могут включать все документы коллекции, по умолчанию не разрешены. Чтобы разрешить их, необходимо указать `not_terms_only_allowed=1` либо в качестве [глобальной настройки](../../Server_settings/Searchd.md#not_terms_only_allowed), либо в качестве [опции поиска](../../Server_settings/Searchd.md#not_terms_only_allowed).

<!-- proofread -->

