129 lines
2.3 KiB
Go
129 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/meilisearch/meilisearch-go"
|
|
)
|
|
|
|
func search() {
|
|
// client := newClient()
|
|
// _, err := client.Index("addressex").UpdateIndex()
|
|
// if err != nil {
|
|
// panic(err)
|
|
// }
|
|
}
|
|
|
|
func init() {
|
|
// TODO: (jpd) move this logic to their own endopints
|
|
createIndex()
|
|
updateIndex()
|
|
loadAddresses()
|
|
}
|
|
|
|
func createIndex() {
|
|
indexConfig := &meilisearch.IndexConfig{Uid: "addressex", PrimaryKey: "id"}
|
|
client := newClient()
|
|
_, err := client.CreateIndex(indexConfig)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func updateIndex() {
|
|
index := newClientIndex()
|
|
_, err := index.UpdateSettings(&meilisearch.Settings{
|
|
DisplayedAttributes: []string{
|
|
"id",
|
|
"country",
|
|
"state",
|
|
"city",
|
|
"neighborhood",
|
|
"road",
|
|
"house_number",
|
|
"house",
|
|
"unit",
|
|
"postal_code",
|
|
"raw_address",
|
|
},
|
|
FilterableAttributes: []string{
|
|
"country",
|
|
"state",
|
|
"city",
|
|
"neighborhood",
|
|
"road",
|
|
"house_number",
|
|
"house",
|
|
"unit",
|
|
"postal_code",
|
|
},
|
|
SearchableAttributes: []string{
|
|
"house_number",
|
|
"house",
|
|
"unit",
|
|
"postal_code",
|
|
},
|
|
Synonyms: map[string][]string{
|
|
"apartamento": []string{"apto", "apt", "ap"},
|
|
"bloco": []string{"bl", "b"},
|
|
"torre": []string{"tr", "t"},
|
|
"conjunto": []string{"conj", "cj"},
|
|
},
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func loadAddresses() {
|
|
// TODO: (jpd) use env var to set address file
|
|
f, err := os.Open("/opt/src/config/data/addresses.csv")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
index := newClientIndex()
|
|
|
|
rows := csv.NewReader(f)
|
|
data := []Address{}
|
|
for {
|
|
row, err := rows.Read()
|
|
if err == io.EOF {
|
|
break
|
|
} else if err != nil {
|
|
panic(err)
|
|
}
|
|
rawAddress := row[0]
|
|
data = append(data, parseAddress(rawAddress))
|
|
if len(data) == 1000 {
|
|
log.Printf("Recorded %d addresses", len(data))
|
|
_, err := index.AddDocuments(data, "id")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
data = []Address{}
|
|
}
|
|
}
|
|
log.Printf("Recorded %d addresses", len(data))
|
|
_, err = index.AddDocuments(data, "id")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func newClientIndex() *meilisearch.Index {
|
|
client := newClient()
|
|
return client.Index("addressex")
|
|
}
|
|
|
|
func newClient() *meilisearch.Client {
|
|
return meilisearch.NewClient(meilisearch.ClientConfig{
|
|
Host: "http://meili:7700",
|
|
APIKey: os.Getenv("MEILI_MASTER_KEY"),
|
|
})
|
|
}
|