繁体   English   中英

一键输入智能搜索

[英]Smart search with one input

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

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

  1. 有些城市的名称超过2个单词,用户可能会以不同的方式输入它们,因为它是自由文本。
  2. 有超过2个单词的名称

题:

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

到目前为止我所做的是:

  1. 向所有用户填写用户数据源
  2. 检查查询中是否存在Country from Countries表
  3. 如果存在则过滤数据源以仅允许来自该国家/地区的用户
  4. 检查查询中是否存在Cities表
  5. 如果存在则过滤数据源以仅允许来自该城市的用户

对于每个表格等等,每次我们在表格中找到匹配项时,我们会从查询中删除找到的部分,为我们留下最自由的参数: 名称

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

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

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

谢谢

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

我在这里没有经验,但我想这是自然语言处理

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

例如,

如果一个用户在纽约市寻找jane doe ,他们就不会把它当作jane new york city doe ,它的名字和城市总是连续的组。 您不知道每个组的长度,但是,您只需要尝试有限数量的组合。 鉴于jane doe new york city ,您可以迭代连续组的组合。

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

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

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

非常有趣的主题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM