一键输入智能搜索

时间:2011-12-24 20:57:58

标签: c# php sql

我一直在浏览一些社交网络,并发现有搜索人员的能力:姓名,年龄范围,城市,国家和性别。 有趣的是,所有这些信息都可以插入到一个由空格分隔的文本框中。然后搜索引擎会以非常准确的方式解析它并返回结果列表。

一方面看起来很简单:按空格拆分查询并搜索所有相关表格。到现在为止还挺好。 但是

  1. 有些城市名称超过2个字,用户可以输入以不同方式,因为它是自由文字。
  2. 有超过2个字的名称
  3. 问题:

    我们如何以这种方式拆分查询,我们当然知道哪个     它的一部分应该在哪里搜索?即用户表中的名称,城市     在城市表,国家等国家?

    到目前为止,我所做的是:

    1. 向所有用户填写用户数据源
    2. 检查查询中是否存在Country from Countries表格
    3. 如果存在,则过滤数据源以仅允许来自该国家/地区的用户
    4. 检查查询中是否存在Cities表格
    5. 如果存在,则过滤数据源以仅允许来自该城市的用户
    6. 以及每个表格的等等,每次我们在表格中找到匹配项时,我们会从查询中删除找到的部分,为我们留下最自由的参数:名称

      如果用户确切知道我的数据库中的城市/国家/地区等是如何编写的话,这似乎有效 但实际情况是,用户可能会进入城市的一部分或错误输入城市。

      我不知道我所做的一切是否正确。只是一个开始点......

      PS:我只需要一个算法流程,因此编程语言并不真正计量。任何想法或指导都非常受欢迎。

      谢谢

2 个答案:

答案 0 :(得分:0)

这类查询对relational databases不利。如果不是必须的话,您可以考虑使用Lucene.Net(c#)Lucene(java)

答案 1 :(得分:0)

我在这里没有经验,但我想这是natural language processing

我认为做这种处理的一部分是接受你并不总能做到这一点。由此可见,您的目标是尝试确定您对做出某些假设有信心的案例。

例如,

如果用户在纽约市中搜索 jane doe ,则不会将其键入jane new york city doe,名称和城市将始终为连续的群体。您不知道每个组的长度,但是,您只需要尝试有限数量的组合。给定jane doe new york city,您可以迭代连续组的组合。

scoreAsName('jane')
scoreAsName('jane doe')
scoreAsName('jane doe new')

......等等...... 并为scoreAsCity做同样的事。

两者都应该有一些明确的高分组合。也许,最好的选择是名称和城市得分的组合,产生最高的总和。您需要制作一个评分算法,可能很大程度上基于数据库匹配,但也可能使用辅助输入,例如,提高本地名称匹配的分数。

非常有趣的主题。