C# 一次输入的智能搜索

C# 一次输入的智能搜索,c#,php,sql,C#,Php,Sql,我一直在浏览一些社交网络,发现有一种按姓名、年龄范围、城市、国家和性别搜索人的功能。 有趣的是,所有这些信息都可以插入到一个文本框中,文本框之间用空格隔开。然后,搜索引擎以非常精确的方式解析它,并返回一个结果列表 一方面,它看起来非常简单:按空间分割查询,并搜索所有相关表以查找匹配项。到现在为止,一直都还不错。 然而 有些城市的名称超过2个单词,用户可以以不同的方式输入,因为这是免费文本 有超过2个单词的名称 问题: 我们如何能够以这样的方式拆分查询,从而确定是哪种查询 它的一部分应该在哪里搜索

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

一方面,它看起来非常简单:按空间分割查询,并搜索所有相关表以查找匹配项。到现在为止,一直都还不错。 然而

  • 有些城市的名称超过2个单词,用户可以以不同的方式输入,因为这是免费文本
  • 有超过2个单词的名称
  • 问题:

    我们如何能够以这样的方式拆分查询,从而确定是哪种查询 它的一部分应该在哪里搜索?i、 e.用户表中的名称,城市 在城市表中,在国家/地区中的国家/地区等

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

  • 用所有用户填充users数据源
  • 检查查询中是否存在Countries from Countries表中的国家
  • 如果存在,则筛选数据源以仅包含来自该国家/地区的用户
  • 检查查询中是否存在“来自城市”表
  • 如果存在,则过滤数据源以仅包含来自该城市的用户
  • 如此类推,而每次我们在表中找到匹配项时,我们都会从查询中删除找到的部分,留下最自由的参数:名称

    如果用户确切地知道城市/国家等是如何在my db中写入的,这似乎是可行的, 但现实情况是,用户可能会输入城市的一部分,或者输入错误

    我不知道我所做的一切是否朝着正确的方向发展。只是一个起点

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


    谢谢

    这种查询不适合
    关系数据库
    。如果这不是必须的,你可能会想使用或

    我在这里没有经验,但我想这是必须的

    我认为做这种处理的一部分是接受你不会总是正确的。因此,您的目标是尝试确定您对做出某些假设有信心的情况

    比如说,

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

    scoreAsName('jane')
    scoreAsName('jane doe')
    scoreAsName('jane doe new')
    
    ……等等。。。 对Scorescity也一样

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

    非常有趣的话题