func TestIndex(t *testing.T) { // todo: run redisearch automatically //t.SkipNow() md := index.NewMetadata().AddField(index.NewTextField("title", 1.0)). AddField(index.NewNumericField("score")) idx := NewIndex("localhost:6379", "testung", md) docs := []index.Document{ index.NewDocument("doc1", 0.1).Set("title", "hello world").Set("score", 1), index.NewDocument("doc2", 1.0).Set("title", "foo bar hello").Set("score", 2), } assert.NoError(t, idx.Drop()) assert.NoError(t, idx.Create()) assert.NoError(t, idx.Index(docs, nil)) q := query.NewQuery(idx.name, "hello world") docs, total, err := idx.Search(*q) assert.NoError(t, err) assert.True(t, total > 0) assert.Len(t, docs, 1) assert.Equal(t, docs[0].Id, "doc1") assert.Equal(t, docs[0].Properties["title"], "hello world") q = query.NewQuery(idx.name, "hello") docs, total, err = idx.Search(*q) assert.NoError(t, err) assert.Equal(t, 2, total) assert.Len(t, docs, 2) assert.Equal(t, docs[0].Id, "doc2") assert.Equal(t, docs[1].Id, "doc1") }
func TestDistributedIndex(t *testing.T) { // todo: run redisearch automatically //st.SkipNow() md := index.NewMetadata().AddField(index.NewTextField("title", 1.0)). AddField(index.NewNumericField("score")) idx := NewDistributedIndex("dtest", []string{"localhost:6379"}, 2, md) docs := []index.Document{ index.NewDocument("doc1", 0.1).Set("title", "hello world").Set("score", 1), index.NewDocument("doc2", 1.0).Set("title", "foo bar hello").Set("score", 2), } assert.NoError(t, idx.Drop()) assert.NoError(t, idx.Create()) assert.NoError(t, idx.Index(docs, nil)) q := query.NewQuery("dtest", "hello world") docs, total, err := idx.Search(*q) assert.NoError(t, err) assert.True(t, total > 0) assert.Len(t, docs, 1) assert.Equal(t, docs[0].Id, "doc1") assert.Equal(t, docs[0].Properties["title"], "hello world") q = query.NewQuery("dtest", "hello") docs, total, err = idx.Search(*q) t.Log(docs, total, err) assert.NoError(t, err) assert.Equal(t, 2, total) assert.Len(t, docs, 2) assert.Equal(t, docs[0].Id, "doc2") assert.Equal(t, docs[1].Id, "doc1") suggs := []index.Suggestion{} for i := 0; i < 100; i++ { suggs = append(suggs, index.Suggestion{fmt.Sprintf("suggestion %d", i), float64(i)}) } assert.NoError(t, idx.AddTerms(suggs...)) suggs, err = idx.Suggest("sugg", 10, false) assert.NoError(t, err) fmt.Println(suggs) assert.Len(t, suggs, 10) }
func TestIndex(t *testing.T) { // todo: run redisearch automatically md := index.NewMetadata().AddField(index.NewTextField("title", 1.0)). AddField(index.NewNumericField("score")) idx, err := NewIndex("http://localhost:8983/solr", "testung", md) assert.NoError(t, err) docs := []index.Document{} for i := 0; i < 100; i++ { docs = append(docs, index.NewDocument(fmt.Sprintf("doc%d", i), 0.1).Set("title", "hello world").Set("body", "lorem ipsum foo bar")) //index.NewDocument("doc2", 1.0).Set("title", "foo bar hello").Set("score", 2), } assert.NoError(t, idx.Drop()) // assert.NoError(t, idx.Create()) assert.NoError(t, idx.Index(docs, nil)) q := query.NewQuery("testung", "hello world") docs, total, err := idx.Search(*q) assert.NoError(t, err) assert.True(t, total == 100) assert.Len(t, docs, int(q.Paging.Num)) assert.Equal(t, docs[0].Id, "doc0") assert.Equal(t, docs[0].Properties["title"], "hello world") }
// SearchBenchmark returns a closure of a function for the benchmarker to run, using a given index // and options, on a set of queries func SearchBenchmark(queries []string, idx index.Index, opts interface{}) func() error { counter := 0 return func() error { q := query.NewQuery(IndexName, queries[counter%len(queries)]).Limit(0, 5) _, _, err := idx.Search(*q) counter++ return err } }
func TestPaging(t *testing.T) { md := index.NewMetadata().AddField(index.NewTextField("title", 1.0)). AddField(index.NewNumericField("score")) idx := NewDistributedIndex("td", []string{"localhost:6379"}, 4, md) assert.NoError(t, idx.Drop()) assert.NoError(t, idx.Create()) N := 100 docs := make([]index.Document, 0, N) for i := 0; i < N; i++ { docs = append(docs, index.NewDocument(fmt.Sprintf("doc%d", i), float32(i)/100).Set("title", fmt.Sprintf("hello world title%d", i)).Set("score", i)) } assert.NoError(t, idx.Index(docs, nil)) q := query.NewQuery("td", "hello").Limit(10, 10) docs, total, err := idx.Search(*q) assert.NoError(t, err) assert.Len(t, docs, 10) assert.Equal(t, docs[0].Id, "doc89") assert.Equal(t, N, total) q = query.NewQuery("td", "title80").Limit(0, 1) docs, total, err = idx.Search(*q) assert.Len(t, docs, 1) assert.Equal(t, docs[0].Id, "doc80") assert.Equal(t, 1, total) q = query.NewQuery("td", "title80").Limit(5, 1) docs, total, err = idx.Search(*q) assert.NoError(t, err) assert.Len(t, docs, 0) }