【问题标题】:Best way to write SQLite Search Query?编写 SQLite 搜索查询的最佳方式?
【发布时间】:2023-04-01 23:52:01
【问题描述】:

编写 SQLite 查询以从表中搜索数据的最佳实践?

  1. 最相关的结果应该在顶部
  2. 结果应该按照搜索词的出现排序
  3. 在同样出现的情况下,
    1. 以搜索词开头的词应该在最前面。
    2. 中间包含搜索字符串的单词应该稍后出现。
    3. 如果发现多个单词具有相同的出现模式,则应按字母顺序排序。

例如,我们有这个数据集:

Borges Extra Virgin Olive Oil
Canola Oil Bottle
Extra Virgin Olive Oil - Olive Jar
Extra Virgin Olive Oil - Olive Tin
Olive Pomace Oil
Supreme Cooking Oil    

当搜索词是O时,输出应该是

Extra Virgin Olive Oil - Olive Jar (3 Occuracne of `O` in start)
Extra Virgin Olive Oil - Olive Tin (3 Occuracne of `O` in start)
Borges Extra Virgin Olive Oil (2 Occuracne of `O` in the start and 1 in mid)
Olive Pomace Oil (2 Occuracne of `O` in the start)
Canola Oil Bottle (1 Occuracne of `O` in the start and 2 in the mid)
Supreme Cooking Oil (1 Occuracne of `O` in the start and 2 in the mid)

当搜索词是Ol时输出应该是

Extra Virgin Olive Oil - Olive Jar (2 Occuracne of `Ol` in start)
Extra Virgin Olive Oil - Olive Tin (2 Occuracne of `Ol` in start)
Borges Extra Virgin Olive Oil (1 Occuracne of `Ol` in start)
Olive Pomace Oil (1 Occuracne of `Ol` in start)
Canola Oil Bottle (1 Occuracne of `Ol` in the mind)

当搜索词是Oli时输出应该是

Extra Virgin Olive Oil - Olive Jar (2 Occuracne of `Oli` in start)
Extra Virgin Olive Oil - Olive Tin (2 Occuracne of `Oli` in start)
Borges Extra Virgin Olive Oil (1 Occuracne of `Oli` in start)
Olive Pomace Oil (1 Occuracne of `Oli` in start)

【问题讨论】:

    标签: jquery sql sqlite search


    【解决方案1】:

    首先,我们要计算搜索字符串的出现次数。设置其列名priority。然后我们根据该搜索出现对所有记录进行排序。

    let searchTerm = 'Oil';
    let searchQuery = `
       SELECT (length(trim(name)) - length(replace(trim(name), '${searchTerm}', ''))) as 'priority', *
       FROM product
       WHERE
           NAME LIKE '${searchTerm}' OR
           NAME LIKE '${searchTerm}%' OR
           NAME LIKE '% ${searchTerm}%' OR
           NAME LIKE '%${searchTerm}%'
       ORDER BY 1 DESC, NAME ASC
       LIMIT 0, 20
    `;
    

    输出将是:

    Extra Virgin Olive Oil - Olive Jar (2 Occuracne of `Oli` in start)
    Extra Virgin Olive Oil - Olive Tin (2 Occuracne of `Oli` in start)
    Borges Extra Virgin Olive Oil (1 Occuracne of `Oli` in start)
    Olive Pomace Oil (1 Occuracne of `Oli` in start)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2010-10-12
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多