[英]Smart search with one input
我一直在浏览一些社交网络,并发现有能力通过以下方式搜索人:姓名,年龄范围,城市,国家和性别。 有趣的是,所有这些信息都可以插入到一个由空格分隔的文本框中。 然后搜索引擎会以非常准确的方式解析它并返回结果列表。
一方面看起来很简单:按空格拆分查询并搜索所有相关表格。 到现在为止还挺好。 然而
题:
我们如何以这种方式拆分查询,我们当然知道它应该在哪里搜索? 即用户表中的名称,城市表中的城市,国家/地区的国家/地区等?
到目前为止我所做的是:
对于每个表格等等,每次我们在表格中找到匹配项时,我们会从查询中删除找到的部分,为我们留下最自由的参数: 名称 。
如果用户确切知道我的数据库中的城市/国家等是如何写的,那么这似乎是有效的,但实际情况是用户可能会进入城市的一部分或错误地输入城市。
我不知道我所做的一切是否正确。 只是一个开始点......
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.