【问题标题】:Sqlite3 autocomplete query?Sqlite3 自动完成查询?
【发布时间】:2014-07-09 14:54:23
【问题描述】:

我有一个 SQLite3 文件,其中包含学生 全名“这意味着它将超过 1 个单词至少 4”和 学生标记“毕业生” .

在 UI 中,当用户开始更改 textField 的值时,UITextField 工作为“search bar”和UITableView 在异步任务中,我根据学生全名从数据库执行 fitch 查询并更新表当数据可用时,每次用户更改 textField 的值时,表格都会更新数据。

问题来了,搜索/查询有很多情况:

1- 用户输入单个单词。// 他在寻找学生有这个名字或者它可能是姓氏。在这种情况下,查询将是:

SELECT grade,name FROM students where name LIKE 'Adam%' OR name LIKE '% Adam' Limit 20 OFFSET 20 

2- 用户输入双字。//他通过他/她的名字和姓氏来寻找学生,或者他输入名字和第二个名字。在这种情况下,查询将是:

SELECT grade,name FROM students where name LIKE 'Ahmad Rami%' OR name LIKE 'Ahmad % Rami%' Limit 20 OFFSET 20

3- 在这种情况下,用户继续输入他输入全名的文本没有问题。

问题是在第一种情况下,如果用户开始输入姓氏“单个单词”,第一个查询将执行,但直到他写完姓氏的完整单词后才会出现结果,因为“%”之后没有“%” Adam”,但如果我们在它后面加上“%”,这将返回错误的结果,以防用户指的是第一个 nam。

前:

“亚当·乔恩·迈克·史密斯”

“Jon Adam Maikel Anglo”

“吉姆斯·阿林·拉菲尔·戈登”

如果用户输入 "A" ==result==> Adam.....smith & jon ada.... Anglo // 两者都会出现,因为 first name 的 " Adam”和“Jon”的以“A”开头。 但就我而言,只有亚当出现。 如果我们通过在末尾添加“%”来更改查询,并且用户输入“A”===>“Jims”将出现在结果中,我不想要它出现

【问题讨论】:

    标签: ios sql objective-c autocomplete sqlite


    【解决方案1】:

    如果您想让查询了解用户的意图,您将很难。你能得到的最好的结果是产生一半直观的结果。因此,如果是用户输入的字符串,您可以搜索“%”或“%%”,遵守输入的字符串必须是名称字符串中至少一个单词的开头的规则。如果没有额外的符号,您将无法将此意图与仅搜索名字的愿望区分开来。

    从您的问题中,我得出名称字符串中的不同单词具有不同的含义。有时一个词被认为是名字的一部分(亚当在“Jon Adam”和“Adam Jon”中)有时不是(Alin 在“Jims Alin”中)。 如果不提供庞大的知识库,您将无法在程序中区分这些不同的含义。

    解决这个问题的方法是告诉你的数据库这些词的含义。例如。名中间名姓。然后您可以专门搜索名字或姓氏,而忽略中间名。

    当然,您的用户必须知道姓名的哪些部分必须被视为名字、中间名或姓氏。从计算机的角度来看,“kjghlgkh”将是一个完美的名字。但我很怀疑这个“名字”是否真的被用作这个世界上某个地方的名字。计算机只是做他们被告知要做的事情,他们不明白他们在做什么。 (好吧,一些 AI 项目给出了惊人的结果,但这需要一种程序和知识库,这在这里不合理)。

    由于我想添加更多评论,我删除了我的评论并将其发布为答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 2020-03-29
      • 1970-01-01
      • 2013-03-18
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多