Как избежать параметров запроса?
Я использую bleve (с http-сервером впереди) для индексации и запроса документов.
Мне нужно выполнить запрос, как показано ниже, который должен запрашивать документы, соответствующие channelID
значение. Как можно избежать полей запроса (в этом случае значение channelID
) в синтаксисе запроса?
query.NewQueryStringQuery("channelID:http://example.com?some-params-with$-+badChars").
Я не могу просто urlencode, потому что если я это сделаю, это не будет соответствовать полю из документированного индексированного (который имеет значение uncocode).
Обновление (TestCase)
package main
import (
"github.com/blevesearch/bleve"
//"github.com/blevesearch/bleve/search"
"github.com/blevesearch/bleve/search/query"
"bytes"
"flag"
log "github.com/golang/glog"
)
type Data struct {
ID string
Message string
URI string
}
func main() {
flag.Parse()
defer log.Flush()
mapping := bleve.NewIndexMapping()
index, err := bleve.New("example.bleve", mapping)
if err != nil {
panic(err)
}
d := Data{
ID: "someID",
Message: "Hello",
URI: `https://www.google.co.uk/search?q=google+search&oq={}///\}ie=UTF-8`,
}
if err := index.Index(d.ID, d); err != nil {
panic(err)
}
//index, _ := bleve.Open("example.bleve")
query := query.NewQueryStringQuery("URI:" + Escape(d.URI))
searchRequest := bleve.NewSearchRequest(query)
result, _ := index.Search(searchRequest)
log.Errorf("total hits %v", result.Total)
}
func Escape(s string) string {
ra := []string{"+", "-", "=",
"&", "|", ">",
"<", "!", "(", ")", "{",
"}", "[", "]", "^",
`~`, `*`, `?`, `:`, `\\`, `/`, `\`, ` `}
exists := func(v string) bool {
for _, s := range ra {
if v == s {
return true
}
}
return false
}
buf := bytes.NewBuffer(nil)
var prevBack bool
for _, v := range s {
if prevBack || !exists(string(v)) {
buf.WriteString(string(v))
prevBack = false
} else {
buf.WriteString(`\`)
buf.WriteString(string(v))
if string(v) == `\` {
prevBack = true
}
}
}
return buf.String()
}
1 ответ
Вы просто ставите обратную косую черту перед специальными символами. Вы найдете список всех специальных символов в документах (внизу под экранированием): http://www.blevesearch.com/docs/Query-String-Query/