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") }
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 TestSuggest(t *testing.T) { md := index.NewMetadata().AddField(index.NewTextField("title", 1.0)). AddField(index.NewNumericField("score")) idx, err := NewIndex("http://localhost:9200", "testung", "doc", md) assert.NoError(t, err) assert.NoError(t, idx.Drop()) assert.NoError(t, idx.Create()) 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.True(t, len(suggs) == 10) }
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) }
"strings" "time" "github.com/RedisLabs/RediSearchBenchmark/index" "github.com/RedisLabs/RediSearchBenchmark/index/elastic" "github.com/RedisLabs/RediSearchBenchmark/index/redisearch" "github.com/RedisLabs/RediSearchBenchmark/index/solr" "github.com/RedisLabs/RediSearchBenchmark/ingest" "github.com/RedisLabs/RediSearchBenchmark/query" ) // IndexName is the name of our index on all engines const IndexName = "wik" var indexMetadata = index.NewMetadata(). AddField(index.NewTextField("title", 10)). AddField(index.NewTextField("body", 1)) // selectIndex selects and configures the index we are now running based on the engine name, hosts and number of shards func selectIndex(engine string, hosts []string, partitions int) (index.Index, index.Autocompleter, interface{}) { switch engine { case "redis": //return redisearch.NewIndex(hosts[0], "wik{0}", indexMetadata) idx := redisearch.NewDistributedIndex(IndexName, hosts, partitions, indexMetadata) return idx, idx, query.QueryVerbatim case "elastic": idx, err := elastic.NewIndex(hosts[0], IndexName, "doc", indexMetadata) if err != nil { panic(err) }