我一直在浏览一些社交网络,并发现有搜索人员的能力:姓名,年龄范围,城市,国家和性别。 有趣的是,所有这些信息都可以插入到一个由空格分隔的文本框中。然后搜索引擎会以非常准确的方式解析它并返回结果列表。
一方面看起来很简单:按空格拆分查询并搜索所有相关表格。到现在为止还挺好。 但是
问题:
我们如何以这种方式拆分查询,我们当然知道哪个 它的一部分应该在哪里搜索?即用户表中的名称,城市 在城市表,国家等国家?
到目前为止,我所做的是:
以及每个表格的等等,每次我们在表格中找到匹配项时,我们会从查询中删除找到的部分,为我们留下最自由的参数:名称。
如果用户确切知道我的数据库中的城市/国家/地区等是如何编写的话,这似乎有效
但实际情况是,用户可能会进入城市的一部分或错误输入城市。
我不知道我所做的一切是否正确。只是一个开始点......
PS:我只需要一个算法流程,因此编程语言并不真正计量。任何想法或指导都非常受欢迎。
谢谢
答案 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做同样的事。
两者都应该有一些明确的高分组合。也许,最好的选择是名称和城市得分的组合,产生最高的总和。您需要制作一个评分算法,可能很大程度上基于数据库匹配,但也可能使用辅助输入,例如,提高本地名称匹配的分数。
非常有趣的主题。