0

我需要实现 Linked in 或 facebook 提供的类似搜索功能。如果您在 fb 中使用新的 Graph 搜索,当您在搜索文本中键入 L 时,它会建议一些用户的名称中带有 L,地点带有 L,页面带有 L 等等。那么这种搜索是如何实现的。

我相信可能有一个表可以存储整个数据的副本。

就像是

TypeID - Text         - ID for the corresponding table
User   - Laurence     - 1
User   - Elis Lowman  - 2
Pages  - Lexus        - 4
Pages  - Lux          - 1
Place  - Las Vegas    - 6
Place  - Lebonan      - 8

我对么 ?或任何其他我们能够实现这一目标的方式?\

编辑 我在链接的 In 中检查了相同的内容。也有类似的搜索。请检查所附图像。 在此处输入图像描述

提前感谢您的帮助。

4

2 回答 2

1

我不知道它是如何在 FaceBook 上实现的,但我会给出一个一般性的答案。

首先请注意,您正在寻找在 Information Retrieval 字段中称为 Query Auto Completion 的内容。

以下是一些基本的指导方针,如何做到这一点:

  1. Trie数据结构在搜索前缀方面非常有效。遍历前缀的路径,然后从那里进行DFS可以为您提供字典中具有相同前缀的所有单词。

  2. 然而,它会给你一个巨大的——大部分是不相关的术语列表,服务器想要给用户最好的建议,而不是所有的建议。常用的方法是使用查询日志。更频繁的查询更有可能是用户正在寻找的内容。因此,搜索引擎拥有查询和前缀的缓存,并使用它为客户提供他最可能想要的页面。

  3. 对最佳自动完成的探索远未结束,在过去的几年里,已经进行了许多关于它的工作。例如,我发现 Naama Kraus 和 Ziv Bar Yosef 的作品:Context Sensitive Query Auto Completion非常有趣。这个想法不仅仅是使用查询日志的一般知识 - 还要使用用户的数据,在这种情况下 - 您正在使用他的最后一个查询 - 因为新查询很可能与他的最后一个查询有关。

于 2013-05-30T09:03:07.840 回答
0

数据库和开源包(例如 Lucene 和 Sphinx Search)允许使用通配符关键字进行前缀搜索。他们的速度和结果质量各不相同。还有专门为这种类型的搜索查询设计的商业包。

于 2013-05-31T06:38:16.127 回答