testbleve.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/blevesearch/bleve"
  5. "github.com/blevesearch/bleve/analysis/analyzer/keyword"
  6. _ "github.com/blevesearch/bleve/index/store/gtreap"
  7. "strconv"
  8. )
  9. func main() {
  10. mapping := bleve.NewIndexMapping()
  11. fm := bleve.NewTextFieldMapping()
  12. fm.Analyzer = keyword.Name
  13. dm := bleve.NewDocumentMapping()
  14. //dm.DefaultAnalyzer = keyword.Name
  15. dm.AddFieldMappingsAt("from", fm)
  16. //fmt.Println(dm.Properties["from"].DefaultAnalyzer)
  17. mapping.AddDocumentMapping("test", dm)
  18. mapping.DefaultType = "test"
  19. //tokens, err := mapping.AnalyzeText(keyword.Name, []byte("bleve indexing is easy"))
  20. //if err != nil {
  21. // panic(err)
  22. //}
  23. //for _, tk := range tokens {
  24. // fmt.Println(string(tk.Term))
  25. //}
  26. //return
  27. index, err := bleve.NewMemOnly(mapping)
  28. //index, err := bleve.NewUsing("", mapping, bleve.Config.DefaultIndexType, "gtreap", map[string]interface{}{})
  29. if err != nil {
  30. panic(err)
  31. }
  32. defer index.Close()
  33. for i := 0; i < 10; i ++ {
  34. id := "ID_" + strconv.FormatInt(int64(i+1), 10)
  35. n := i%5
  36. //fmt.Printf("DocID: %s %d\n", id, n)
  37. message := map[string]string{
  38. "id": id,
  39. "from": "marty.schoch@gmail.com 哈哈 中国" + strconv.Itoa(n),
  40. "body": "bleve indexing is easy",
  41. }
  42. if err = index.Index(message["id"], message); err != nil {
  43. panic(err)
  44. }
  45. }
  46. q := bleve.NewPrefixQuery("id_")
  47. //tq := bleve.NewTermQuery("easy")
  48. //tq.SetField("body")
  49. req := bleve.NewSearchRequest(q)
  50. req.Fields = []string{"from", "body"}
  51. facetReq := bleve.NewFacetRequest("from", 4) // 种类
  52. req.AddFacet("facet_name", facetReq)
  53. result, err := index.Search(req)
  54. if err != nil {
  55. panic(err)
  56. }
  57. for _, f := range result.Facets {
  58. for _, t := range f.Terms {
  59. fmt.Printf("[%s]%d\n", t.Term, t.Count)
  60. }
  61. }
  62. //for _, hit := range result.Hits {
  63. // docid, err := index.Document(hit.ID)
  64. // if err != nil {
  65. // panic(err)
  66. // }
  67. // fmt.Println(hit.ID, docid.Fields[0].Name(), string(docid.Fields[0].Value()))
  68. //}
  69. }