加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 搜索引擎关键词解析器

发布时间:2020-12-13 13:22:56 所属栏目:PHP教程 来源:网络整理
导读:这是我想要做的: 我需要创建一个使用以下运算符的搜索引擎解析器: 苹果和橘子(AND操作符) 苹果或橘子(OR操作符) 苹果而不是橘子(AND NOT操作符) “苹果”(行情操作符) 苹果和(橘子或梨)(圆括号运算符) Appl *(明星操作符) 使用一些preg_replace,我设法将字
这是我想要做的:

我需要创建一个使用以下运算符的搜索引擎解析器:

>苹果和橘子(AND操作符)
>苹果或橘子(OR操作符)
>苹果而不是橘子(AND NOT操作符)
>“苹果”(行情操作符)
>苹果和(橘子或梨)(圆括号运算符)
> Appl *(明星操作符)

使用一些preg_replace,我设法将字符串转换为数组,然后解析此数组以获取MySQL查询.
但我不喜欢这种方式而且非常不稳定!

我在网上搜索了一些这样做的脚本,我没有运气!

有人可以帮我实现吗?

谢谢

好的,这将是一个很大的答案.

我认为你需要的是一个解析器生成器.一种软件,可根据给定的语法生成解析文本的代码.这些解析器通常有两个主要组件:词法分析器和解析器.词法分析器识别TOKENS(单词),解析器根据你的语法检查令牌顺序是否正确.

在词法分析器中,您应该声明以下标记

TOKENS ::= (AND,OR,NOT,WORD,WORDSTAR,LPAREN,RPAREN,QUOTE)
WORD ::= '/w+/'
WORDSTAR ::= '/w+*/'

语法应该像这样定义:

QUERY ::= word
QUERY ::= wordstar
QUERY ::= lparen QUERY rparen
QUERY ::= QUERY and QUERY
QUERY ::= QUERY or QUERY
QUERY ::= QUERY and not QUERY
QUERY ::= quote MQUERY quote
MQUERY ::= word MQUERY
MQUERY ::= word

该语法定义了一种语言,其中包含您需要的所有功能.根据您使用的软件,您可以定义处理每个规则的函数.这样,您可以将文本查询转换为sql where子句.

我不是真的进入php,但我在网上搜索了一个解析器生成器并且出现了PHP_ParserGenerator.

请记住,只要数据库增长,这些查询可能会成为结构化存储系统的问题.

您可能想要尝试一个全文搜索引擎,它允许您执行此操作以及与文本搜索相关的许多其他功能.这就是IndexTank的工作原理

首先,将所有数据库记录(或文档)添加(或搜索方言中的“索引”)到IndexTank.

$api = new ApiClient(...);
$index = $api->get_index('my_index');
foreach ($dbRows as $row) {
  $index->add_document($row->id,array('text' => $row->text));
}

之后,您可以使用所需的所有运算符在索引中进行搜索

$index = $api->get_index('my_index');
$search_result = $index->search('Apples AND Oranges');
$search_result = $index->search('Apples OR Oranges');
$search_result = $index->search('Apples AND NOT Oranges');
$search_result = $index->search('"apples oranges"');
$search_result = $index->search('Apples AND ( Oranges OR Pears )');
$search_result = $index->search('Appl*');

我希望我回答你的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读