feat: enable advanced query string syntax Example: +Source:/home-manager|nixpkgs/ +"systemd service" https://blevesearch.com/docs/Query-String-Query/ References: https://codeberg.org/alanpearce/searchix/issues/6
3 files changed, 30 insertions(+), 8 deletions(-)
M frontend/static/style.css → frontend/static/style.css
@@ -67,6 +67,17 @@ padding: unset; margin: unset; } +legend { + display: flex; + width: 100%; + justify-content: space-between; + align-items: baseline; +} + +.help { + align-self: right; +} + section { border: none; margin: unset;@@ -126,7 +137,7 @@ h2 { font-size: 1.5rem; } -h2:only-child { +h2 { margin-top: 0; }
M internal/components/search.go → internal/components/search.go
@@ -16,6 +16,12 @@ FieldSet( Legend( ID("legend"), H2(g.Textf("%s search", sourceNameAndType(tdata.Source))), + A( + Class("help"), + Target("_blank"), + Href("https://blevesearch.com/docs/Query-String-Query/"), + g.Text("advanced query syntax"), + ), ), Input( ID("query"),
M internal/index/search.go → internal/index/search.go
@@ -5,6 +5,7 @@ "bytes" "context" "encoding/gob" "iter" + "strings" "time" "alin.ovh/searchix/internal/config"@@ -126,13 +127,17 @@ pageSize int, ) (*Result, errors.E) { query := bleve.NewBooleanQuery() - // match the user's query in any field ... - query.AddMust(bleve.NewDisjunctionQuery( - setBoost(bleve.NewTermQuery(keyword), 50), - setBoost(bleve.NewPrefixQuery(keyword), 25), - setBoost(bleve.NewMatchPhraseQuery(keyword), 25), - bleve.NewMatchQuery(keyword), - )) + if strings.ContainsAny(keyword, "+-=&|<>!(){}[]^\"~*?:\\/") { + query.AddMust(bleve.NewQueryStringQuery(keyword)) + } else { + // match the user's query in any field ... + query.AddMust(bleve.NewDisjunctionQuery( + setBoost(bleve.NewTermQuery(keyword), 50), + setBoost(bleve.NewPrefixQuery(keyword), 25), + setBoost(bleve.NewMatchPhraseQuery(keyword), 25), + bleve.NewMatchQuery(keyword), + )) + } if source != nil { query.AddMust(