Как улучшить (или получить доступ) результаты поисковых систем?

Когда я пытаюсь выполнить поисковый запрос с помощью 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
    }
Другие вопросы по тегам