簡體   English   中英

編寫 SQLite 搜索查詢的最佳方式?

[英]Best way to write SQLite Search Query?

編寫 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)

首先,我們必須計算搜索字符串的出現次數。 設置其列名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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM