improve search query parsing
This commit is contained in:
parent
9b415b7445
commit
d20029be7a
66
database.go
66
database.go
|
@ -252,51 +252,52 @@ func gethonksbyconvoy(userid int64, convoy string, wanted int64) []*Honk {
|
|||
return honks
|
||||
}
|
||||
func gethonksbysearch(userid int64, q string, wanted int64) []*Honk {
|
||||
honker := ""
|
||||
withhonker := 0
|
||||
site := ""
|
||||
withsite := 0
|
||||
withnotq := 0
|
||||
var queries []string
|
||||
var params []interface{}
|
||||
queries = append(queries, "honks.honkid > ?")
|
||||
params = append(params, wanted)
|
||||
queries = append(queries, "honks.userid = ?")
|
||||
params = append(params, userid)
|
||||
|
||||
terms := strings.Split(q, " ")
|
||||
q = "%"
|
||||
notq := "%"
|
||||
for _, t := range terms {
|
||||
negate := " "
|
||||
if t[0] == '-' {
|
||||
t = t[1:]
|
||||
negate = " not "
|
||||
}
|
||||
if t == "" {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(t, "site:") {
|
||||
site = t[5:]
|
||||
site := t[5:]
|
||||
site = "%" + site + "%"
|
||||
withsite = 1
|
||||
queries = append(queries, "xid"+negate+"like ?")
|
||||
params = append(params, site)
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(t, "honker:") {
|
||||
honker = t[7:]
|
||||
honker := t[7:]
|
||||
xid := fullname(honker, userid)
|
||||
if xid != "" {
|
||||
honker = xid
|
||||
}
|
||||
withhonker = 1
|
||||
queries = append(queries, negate+"(honks.honker = ? or honks.oonker = ?)")
|
||||
params = append(params, honker)
|
||||
params = append(params, honker)
|
||||
continue
|
||||
}
|
||||
if t[0] == '-' {
|
||||
if t == "-" {
|
||||
continue
|
||||
t = "%" + t + "%"
|
||||
queries = append(queries, "noise"+negate+"like ?")
|
||||
params = append(params, t)
|
||||
}
|
||||
if len(notq) != 1 {
|
||||
notq += " "
|
||||
}
|
||||
notq += t[1:]
|
||||
continue
|
||||
}
|
||||
if len(q) != 1 {
|
||||
q += " "
|
||||
}
|
||||
q += t
|
||||
}
|
||||
q += "%"
|
||||
notq += "%"
|
||||
if notq != "%%" {
|
||||
withnotq = 1
|
||||
}
|
||||
rows, err := stmtHonksBySearch.Query(wanted, userid, withsite, site, withhonker, honker, honker, q, withnotq, notq, userid)
|
||||
|
||||
selecthonks := "select honks.honkid, honks.userid, username, what, honker, oonker, honks.xid, rid, dt, url, audience, noise, precis, format, convoy, whofore, flags from honks join users on honks.userid = users.userid "
|
||||
where := "where " + strings.Join(queries, " and ")
|
||||
butnotthose := " and convoy not in (select name from zonkers where userid = ? and wherefore = 'zonvoy' order by zonkerid desc limit 100)"
|
||||
limit := " order by honks.honkid desc limit 250"
|
||||
params = append(params, userid)
|
||||
rows, err := opendatabase().Query(selecthonks+where+butnotthose+limit, params...)
|
||||
honks := getsomehonks(rows, err)
|
||||
return honks
|
||||
}
|
||||
|
@ -724,7 +725,7 @@ func cleanupdb(arg string) {
|
|||
var stmtHonkers, stmtDubbers, stmtNamedDubbers, stmtSaveHonker, stmtUpdateFlavor, stmtUpdateHonker *sql.Stmt
|
||||
var stmtAnyXonk, stmtOneXonk, stmtPublicHonks, stmtUserHonks, stmtHonksByCombo, stmtHonksByConvoy *sql.Stmt
|
||||
var stmtHonksByOntology, stmtHonksForUser, stmtHonksForMe, stmtSaveDub, stmtHonksByXonker *sql.Stmt
|
||||
var stmtHonksBySearch, stmtHonksByHonker, stmtSaveHonk, stmtUserByName, stmtUserByNumber *sql.Stmt
|
||||
var stmtHonksByHonker, stmtSaveHonk, stmtUserByName, stmtUserByNumber *sql.Stmt
|
||||
var stmtEventHonks, stmtOneBonk, stmtFindZonk, stmtFindXonk, stmtSaveDonk *sql.Stmt
|
||||
var stmtFindFile, stmtGetFileData, stmtSaveFileData, stmtSaveFile *sql.Stmt
|
||||
var stmtAddDoover, stmtGetDoovers, stmtLoadDoover, stmtZapDoover, stmtOneHonker *sql.Stmt
|
||||
|
@ -771,7 +772,6 @@ func prepareStatements(db *sql.DB) {
|
|||
stmtHonksByHonker = preparetodie(db, selecthonks+"join honkers on (honkers.xid = honks.honker or honkers.xid = honks.oonker) where honks.honkid > ? and honks.userid = ? and honkers.name = ?"+butnotthose+limit)
|
||||
stmtHonksByXonker = preparetodie(db, selecthonks+" where honks.honkid > ? and honks.userid = ? and (honker = ? or oonker = ?)"+butnotthose+limit)
|
||||
stmtHonksByCombo = preparetodie(db, selecthonks+" where honks.honkid > ? and honks.userid = ? and honks.honker in (select xid from honkers where honkers.userid = ? and honkers.combos like ?) "+butnotthose+" union "+selecthonks+"join onts on honks.honkid = onts.honkid where honks.honkid > ? and honks.userid = ? and onts.ontology in (select xid from honkers where combos like ?)"+butnotthose+limit)
|
||||
stmtHonksBySearch = preparetodie(db, selecthonks+"where honks.honkid > ? and honks.userid = ? and (? = 0 or xid like ?) and (? = 0 or honks.honker = ? or honks.oonker = ?) and noise like ? and (? = 0 or noise not like ?)"+butnotthose+limit)
|
||||
stmtHonksByConvoy = preparetodie(db, selecthonks+"where honks.honkid > ? and (honks.userid = ? or (? = -1 and whofore = 2)) and convoy = ?"+limit)
|
||||
stmtHonksByOntology = preparetodie(db, selecthonks+"join onts on honks.honkid = onts.honkid where honks.honkid > ? and onts.ontology = ? and (honks.userid = ? or (? = -1 and honks.whofore = 2))"+limit)
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@ changelog
|
|||
|
||||
=== next
|
||||
|
||||
+ Improved search query parsing.
|
||||
|
||||
+ Tables
|
||||
|
||||
+ Reduce retries talking to dumb servers.
|
||||
|
|
Loading…
Reference in New Issue