Как улучшить (или получить доступ) результаты поисковых систем?
Когда я пытаюсь выполнить поисковый запрос с помощью bleve, я всегда получаю 10 или меньше результатов. Как я могу увеличить этот лимит или выполнить поиск по всем данным?
Вот пример кода, где я ожидаю получить 35 результатов, но получаю 10 (ps
calc.Rand()
функция выдает случайные байты):
package search
import (
"testing"
"github.com/blevesearch/bleve/v2"
)
func TestSearcher(t *testing.T) {
mapping := bleve.NewIndexMapping()
searcher, _ := bleve.New("search/src", mapping)
for i := 0; i < 35; i++ {
searcher.Index(string(calc.Rand()), "stuff")
}
query := bleve.NewMatchQuery("stuff")
search := bleve.NewSearchRequest(query)
searchRez, _ := searcher.Search(search)
t.Error(len(searchRez.Hits))
}
Результат я получаю:
--- FAIL: TestSearcher (2.33s)
/Users/ ... /search/search_test.go:86: 10
Ожидаемый результат:
--- FAIL: TestSearcher (2.33s)
/Users/ ... /search/search_test.go:86: 35
Как мне получить доступ ко всем 35 значениям, которые хранятся в этом индексе?
1 ответ
Решение
Установите поле
Size
на SearchRequest
:
Size / From описывает, сколько и какую часть набора результатов нужно вернуть.
search := bleve.NewSearchRequest(query)
search.Size = 35 // or the page size you want
searchRez, _ := searcher.Search(search)
fmt.Println(len(searchRez.Hits)) // prints 35
или с разбивкой на страницы вы устанавливаете поле
From
постепенно в зависимости от размера страницы. Надуманный пример:
count, _ := searcher.DocCount()
for i := 0; i < int(count); i += 10 /* page size */ {
search.From = i
searchRez, _ := searcher.Search(search)
fmt.Println(len(searchRez.Hits)) // prints 10 10 10 5
}