请教一个问题,搜索词的生成应该怎么做。

2022-10-21 10:06:05 +08:00
 Braisdom

例如在 Google 中输入:Java

google 会生成: javascript, java binary search, java 教程等一些列。

这些生成算法应该使用哪些?

2420 次点击
所在节点    程序员
29 条回复
optional
2022-10-21 10:08:36 +08:00
ML 的经典场景
Braisdom
2022-10-21 10:09:38 +08:00
@optional 有具体的方法吗,目前只需要做到及格分就可以了。
XJohn
2022-10-21 10:15:13 +08:00
一般都不是算法生成的。
suggest 数据都会有以下一些来源:
1. 搜索数据本身的一些 title 、tag 属性等
2. 用户的搜索词(如用户可能会搜索 java ,还可能会搜索 javascript)
3. 爬虫抓取
Braisdom
2022-10-21 10:30:45 +08:00
@XJohn 数据我有,我主要是做数据分析的搜索,关键词 都是预定义的,数据会比较多。
realrojeralone
2022-10-21 10:35:52 +08:00
最简单的直接基于 Trie 做,query 的权重要加到 TrieNode 里,Trie 树里召回一堆词以后再加入一些提前处理好的非前缀词,比如和召回 query 强相关的中缀、后缀,最后排序
Braisdom
2022-10-21 10:38:01 +08:00
@realrojeralone 序列的权重怎么处理呢,例如:java orm 后面的词,单个词的权重容易计算,序列就比较麻烦了。
optional
2022-10-21 10:38:32 +08:00
如果只是前缀匹配,那非常简单,像楼上说的 trie 树或者直接数据库前缀匹配都可以获得一些推荐,难的是怎么做权重和关联性
wx006
2022-10-21 10:39:48 +08:00
@Braisdom 处理好的数据写到 es 可以满足要求吗
MindMindMax
2022-10-21 10:42:37 +08:00
其实,搜索运营人员也会参与进来
Braisdom
2022-10-21 10:44:41 +08:00
@wx006 ES 倒是一个不错的方法,检索起来也比较灵活,搜索效率也够用了。
realrojeralone
2022-10-21 10:44:52 +08:00
@Braisdom 没有序列的概念,每个 suggestion 都是整体,比如 "javascript" / "java orm",在数据挖掘时 "java orm" 是从日志中挖掘出的用户 query ,如果很多人搜了 "java orm",这个 query 的权重就比较高。虽然在搜索时引擎内部会分词做召回,但是实际上用户想搜索的是个整体 "java orm",所以这个 query 就是个 suggestion ,不需要再分词单独计算权重。
Braisdom
2022-10-21 10:46:35 +08:00
我在做一个类似 ThoughtSpot 的项目,目前核心的 SQL 编译已经解决了,就差搜索提醒和 UI 了。
realrojeralone
2022-10-21 10:47:07 +08:00
没有性能要求,对效果要求也不高,可以直接上 ES ,不然没必要自研,还是挺麻烦的
Braisdom
2022-10-21 10:49:17 +08:00
@realrojeralone 搜索日志,只能优化排序,原生的搜索词生成是基于系统的关键字检索出来的,系统在冷启动时,排序可以是随机的,随着使用情况,逐步优化。当然也可以初始化一些排序。
shoumu
2022-10-21 10:50:30 +08:00
Braisdom
2022-10-21 10:51:24 +08:00
@realrojeralone 最关键是能够持续学习,随着持续的使用,能够学习到用户的使用习惯。
realrojeralone
2022-10-21 11:06:02 +08:00
@Braisdom 听起来不是搜索引擎类产品,那就可以先人工运维一版初始的 query 和权重,后续有了搜索日志以后再优化,或者考虑其他不用 Trie 的实现,完全用算法 比如 n-gram 生成 suggestion
buyan3303
2022-10-21 11:12:08 +08:00
不懂的人提一嘴 搜索关联展现这东西,好像是叫倒排索引。
至于怎么展现 就是上面各位坛友说的了。
Braisdom
2022-10-21 11:19:23 +08:00
@realrojeralone 我想做的是根据用户输入的关键词编译成不同数据库的 SQL ,进行数据分析,和搜索引擎不太一样,但搜索提醒是用户体验的关键,这块做不好,后面再强大,也没啥用。
fcten
2022-10-21 11:38:40 +08:00
trie 树召回,召回之后再排序。没必要把召回和排序放到一起,不利于后续迭代优化。

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

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

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

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

© 2021 V2EX