duncanogle / boolean-search-parser
A way to translate Boolean Search logic into MySQL Fulltext Parameters
Installs: 21 534
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 1
Forks: 3
pkg:composer/duncanogle/boolean-search-parser
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.8.*
This package is not auto-updated.
Last update: 2026-01-15 07:10:47 UTC
README
The aim of this class is to take a Boolean Search and to convert it into something that can be used in a MySQL Fulltext Search.
The idea came about after recently working a lot with Boolean Search systems, and after reading this StackOverflow question, nothing really exists out there for MySQL.
Big thanks goes to PHP SQL Parser for having such a lovely Tokeniser and related methods, which made this easier.
Goals
- To provide a good-enough conversion
- To not try and correct mistakes with brackets and quotes etc.
Notes
Use
$parser = new \DuncanOgle\BooleanSearchParser\Parser();
echo $parser->parse("ict OR (technology AND bob)");
// ict (+technology +bob)
Regarding order
Order and brackets are important, more often than not OR logic takes priority
sales OR finance AND manager will become sales finance +manager and not sales +finance +manager
Todo
- Handle the * character
- Turn into a package that can be pulled in via composer
- Move tests over to PHP Unit
- Add custom priority settings (currently its OR>AND>NOT)
- Add optional word stemmer like the one used here
Simple Examples
| Input | Output |
|---|---|
ict |
+ict |
ict it |
+ict +it |
ict OR it |
ict it |
NOT ict |
-ict |
it NOT ict |
+it -ict |
web AND (ict OR it) |
+web +(ict it) |
ict OR (it AND web) |
ict (+it +web) |
ict NOT (ict AND it AND web) |
+ict -(+ict +it +web) |
php OR (NOT web NOT embedded ict OR it) |
php (-web -embedded ict it) |
(web OR embedded) (ict OR it) |
+(web embedded) +(ict it) |
develop AND (web OR (ict AND php)) |
+develop +(web (+ict +php)) |
"ict |
null |
"ict OR it" |
+"ict OR it" |
Complex Examples
| Input | Output |
|---|---|
"business development" or "it sales" and (danish or dutch or italian or denmark or holland or netherlands or italy) |
"business development" "it sales" +(danish dutch italian denmark holland netherlands italy) |
(procurement or buying or purchasing) and (marine or sea) and (engineering or engineer) |
+(procurement buying purchasing) +(marine sea) +(engineering engineer) |