我们目前在生产中有一个解决方案,但它很糟糕。请给我一个新的视角。
我们有一个 PERSON 表,其中包含 ID、LAST_NAME、FIRST_NAME、MIDDLE_NAME 和 SUFFIX_NAME。所有这些列(当然 ID 除外)都可以为空。
索引此表的最佳方法是什么,使用通配符查询全名的最佳方法是什么?
这是在网络应用程序中使用的,我们需要允许用户搜索类似
Smit*, Bob
它返回“Bob Smith”、“Bobby Smithson”等。
我们不允许用户对结果进行排序。
你有两个我能想到的选择:
一组特定用户搜索的索引
或者
对于选项 1,您需要将搜索字符串“Smit*, Bob”转换为您正在建立索引的内容,例如:
where upper(last_name) like 'SMIT%' and upper(first_name) like 'BOB%'
with function based indexes onupper(last_name)
and perhapsupper(first_name)
我们使用 Lucene.Net 在我们的 Oracle 数据库中搜索联系人。设置索引器、索引和搜索字段需要在编码方面进行一些投资,但一旦完成,您就可以利用许多搜索选项。
用户报告了常见的问题:输入的搜索词太宽,得到的结果太多,但它对输入的名字非常有用,例如:“Robertson”,但你的搜索是“Bert”