请教各位大佬,编写一个类似 google 搜索语法的搜索工具有什么好的思路呢?

2018-10-29 16:35:26 +08:00
 xixijun

这里数据库用的 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 的搜索语法匹配相应的查询语法得出结果

有老哥有更好的思路吗,不甚感激~

2733 次点击
所在节点    编程
8 条回复
NjcyNzMzNDQ3
2018-10-29 16:58:34 +08:00
Create a search engine
NjcyNzMzNDQ3
2018-10-29 16:59:16 +08:00
google Create a search engine
xixijun
2018-10-29 17:12:29 +08:00
@NjcyNzMzNDQ3 可能我没说清楚,ES 数据已经有了,只差搜索语法的实现
yuikns
2018-10-31 07:35:33 +08:00
因此你就是想做个文法分析。一种方法是手撸。先 tokenlize, 然后构造 ast,然后编译成 es query。这个入手比较简单,但是手撸的话扩展没那么快。

另一种是 yacc 工具。比如 python 你可以试试这个: https://github.com/dabeaz/ply
LetFoxRun
2018-10-31 19:10:15 +08:00
@xixijun 这个不应该是语法,应该是索引。
xixijun
2018-11-06 18:03:33 +08:00
@yuikns 谢谢~,我研究下
@LetFoxRun 也算是吧
hanssx
2021-05-25 14:16:03 +08:00
@xixijun 老哥,最后怎么解决的呀。
xixijun
2021-05-25 14:57:56 +08:00
@hanssx 用上面老哥提供的 https://github.com/dabeaz/ply 构造的 es query

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/502238

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX