这里数据库用的 es,
大概想了一下,最大的难点是如何解析查询参数。 比如下面的搜索语法,(似乎不支持 markdown table,大家将就着看吧)
|搜索语法|语法解释 |
|-------|---------|
|"test101" | 关键字短语 |
|host:v2ex.com | 主机名|
|filetype:PDF | url 以 pdf 结尾|
|inurl:php | url 包含 php|
|intitle:登录 | 网页标题包含"登录"|
|intext:"后台" | 网页内容包含"后台"|
他们之间可能还需要有逻辑符号 + 且
^ 或
~ 非
的联系
比如"test101 + host:v2ex.com"
搜索主机名是 V2EX 并且内容包含 test101 的结果。
这里我的思路是用 pyparsing 或者正则提取 搜索语法的关键字,再结合 es 的搜索语法匹配相应的查询语法得出结果
有老哥有更好的思路吗,不甚感激~
1
NjcyNzMzNDQ3 2018-10-29 16:58:34 +08:00
Create a search engine
|
2
NjcyNzMzNDQ3 2018-10-29 16:59:16 +08:00
google Create a search engine
|
3
xixijun OP @NjcyNzMzNDQ3 可能我没说清楚,ES 数据已经有了,只差搜索语法的实现
|
4
yuikns 2018-10-31 07:35:33 +08:00
因此你就是想做个文法分析。一种方法是手撸。先 tokenlize, 然后构造 ast,然后编译成 es query。这个入手比较简单,但是手撸的话扩展没那么快。
另一种是 yacc 工具。比如 python 你可以试试这个: https://github.com/dabeaz/ply |
8
xixijun OP @hanssx 用上面老哥提供的 https://github.com/dabeaz/ply 构造的 es query
|