bluem / searchstringparser
解析搜索字符串的库
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: ^5.0
README
SearchstringParser 概述
这是什么?
SearchstringParser 是一个用于 PHP 5.3 或更高版本的库,它将类似于搜索引擎的搜索字符串分割成部分。它支持短语、必填、可选和排除的术语/短语,通过使用 +
、-
、AND
、NOT
和 OR
。
如果您使用 Apache Solr 等搜索引擎,该搜索引擎本身执行解析,则可能不需要此类库。但在需要可切换的搜索后端但仍然需要一致的搜索语法或您只是使用 SQL 数据库的全文搜索功能的情况下,它提供了简单易用的解析。同样,即使在使用 Solr 等软件的情况下,控制传递给 Solr 的内容也可能很有用,例如优化搜索语法(例如:根据可选术语的数量设置 mm
参数)。
安装
安装此库的首选方式是通过 Composer。为此,将 "bluem/searchstringparser": "~2.0"
添加到您的 composer.json
文件中的要求中。由于此库使用 语义版本控制,当您运行 composer update
时,您将获得修复和功能添加,但不会破坏 API 的更改。
或者,您可以使用 git 克隆存储库或下载一个标记的版本。
支持的语法
- 以
+
为前缀的术语被视为必填项。例如:+word
。 - 当两个术语之间有
AND
时,两者都被视为必填项。例如:Hello AND World
。 - 以
-
为前缀的术语被视为排除项。例如:-word
。 - 以
NOT
为前缀的术语被视为排除项。例如:NOT word
。 - 当两个术语之间有
OR
时,两者都被视为可选项。例如:Hello OR World
。 - 可以使用双引号指定短语。短语内的双引号可以使用反斜杠转义。例如:
"my \" phrase"
。 - 有关
+
、-
、AND
、OR
、NOT
的上述所有内容也适用于短语。
默认情况下,上述任何规则都不适用于术语,它被视为可选项。可以通过将 array('defaultOperator' => SearchstringParser:SYMBOL_AND)
作为第二个参数传递给 SearchstringParser
的构造函数来更改此行为,使其成为必填项。
示例
Hello World
➔ 可选术语“Hello”和“World”,没有必填或排除术语Hello World -foobar
➜ 可选术语“Hello”和“World”,排除术语“foobar”,没有必填术语(相当于:Hello World NOT foobar
)+"search string parser" "PHP 5.6" OR "PHP 5.3" NOT "PHP 4" NOT C# -C++ C
➔ 必填短语“search string parser”,可选短语“PHP 5.6”和“PHP 5.3”,排除短语/术语“PHP 4”、“C#”和“C++”,跳过的术语“C”(它比默认最小长度 2 个字符短)
带有 array('defaultOperator' => SearchstringParser:SYMBOL_AND)
的示例
Hello World -foobar
➜ 必填术语“Hello”和“World”,排除术语“foobar”,没有可选术语
用法
$search = new BlueM\SearchstringParser('Your AND string long OR short NOT "exclude this phrase" X'); $search->getAndTerms(); // array('your', 'string') $search->getOrTerms(); // array('long', 'short') $search->getNotTerms(); // array('exclude this phrase') $search->getSkippedTerms(); // array('X')
更改最小长度
只需将长度传递给构造函数
$search = new BlueM\SearchstringParser('...', array('minlength' => 3));
处理错误
可能会发生以下错误
- 使用
"
打开短语,但没有关闭 - “NOT”用作最后一个术语
- “OR”用作第一个或最后一个术语
- “AND”用作第一个或最后一个术语
- “OR”之前或之后跟有排除的术语/短语
- “AND”之前或之后跟有排除的术语/短语
- “NOT”之后跟有以“+”为前缀的术语
默认行为是不抛出异常,而是尽可能利用当前情况。(详细信息请参见单元测试或Testdox输出。)SearchstringParser仍会收集异常,因此如果您想向用户提供提示,可以通过调用方法getExceptions()
来实现。由于SearchstringParser
根据问题类型抛出不同的异常,您可以分别处理(或忽略)错误,例如通过执行instanceof
检查。
作者 & 许可证
此代码由Carsten Blüm(www.bluem.net)编写,并许可在BSD 2-Clause许可证下使用。
早期版本的更改
从2.0.3到2.0.4
- 修复异常类中的命名空间问题
- 添加PHPUnit作为开发依赖项(测试已存在,但缺少依赖项)
从2.0.2到2.0.3
- 更新README
从2.0.1到2.0.2
- 使用PSR-4而不是PSR-0
从2.0到2.0.1
- HHVM兼容性
从1.0.1到2.0
- API未更改,但语义已更改。版本低于2的行为类似于将
defaultOperator
(在2.0版中引入)设置为SearchstringParser:SYMBOL_AND
。