Go Open Source, Distributed, Simple и Efficient Full Text Search Engine.
Возможности:
Эффективный индекс и поиск (1M твитов, 500M данных, 28 секунд на индексацию, 1,65 миллисекунд на ответ поиска, 19K поисковых запросов в секунду).
Поддержка китайского сегментации (используется пакет gse для параллельной сегментации, скорость 27 МБ/с).
Логический поиск.
Поиск по китайскому пиньинь (используется пакет gpy для китайского пиньинь).
Вычисление близости ключевых слов в тексте (token proximity).
Расчёт релевантности BM25.
Настройка критериев оценки и правил оценки.
Онлайн-добавление и удаление индексов.
Различные постоянные хранилища.
Heartbeat.
Распределение индексов и поиска.
Реализация распределённых индексов и поиска (см. раздел «Распределённый индекс и поиск»).
Лицензия Apache License v2, дружественная к коммерческим приложениям.
Просмотр правил сегментации.
Riot v0.10.0 был выпущен в ноябре 2017 года. Полную информацию см. в разделе «Журнал изменений».
go get -u github.com/go-ego/riot
Требуется версия Go не ниже 1.8.
Riot использует go module или dep для управления зависимостями.
go get -u github.com/go-ego/re
Создание проекта riot:
$ re riot my-riotapp
Запуск созданного проекта riot. Можно перейти в папку приложения и выполнить:
$ cd my-riotapp && re run
Сначала рассмотрим пример (из simplest_example.go):
package main
import (
"log"
"github.com/go-ego/riot"
"github.com/go-ego/riot/types"
)
var (
// searcher 是协程安全的
searcher = riot.Engine{}
)
func main() {
// 初始化
searcher.Init(types.EngineOpts{
Using: 3,
GseDict: "zh",
// GseDict: "your gopath"+"/src/github.com/go-ego/riot/data/dict/dictionary.txt",
})
defer searcher.Close()
text := "《复仇者联盟3:无限战争》是全片使用IMAX摄影机拍摄"
text1 := "在IMAX影院放映时"
text2 := "全片以上下扩展至IMAX 1.9:1的宽高比来呈现"
// 将文档加入索引,docId 从1开始
searcher.Index("1", types.DocData{Content: text})
searcher.Index("2", types.DocData{Content: text1}, false)
searcher.Index("3", types.DocData{Content: text2}, true)
// 等待索引刷新完毕
searcher.Flush()
// engine.FlushIndex()
// 搜索输出格式见 types.SearchResp 结构体
log.Print(searcher.Search(types.SearchReq{Text:"复仇者"}))
}
Это очень просто!
Затем посмотрите вводное руководство, которое научит вас создавать веб-сайт для поиска в Twitter менее чем за 200 строк кода Go.
package main
import (
"log"
"github.com/go-ego/riot"
"github.com/go-ego/riot/types"
)
var (
searcher = riot.New("zh")
)
func main() {
data := types.DocData{Content: `I wonder how, I`}
}
``` ```
удивительно, почему
, интересно, где они`}
data1 := types.DocData{Content: "поэтому, привет, до свидания"}
data2 := types.DocData{Content: "нет причины"}
searcher.Index("1", data)
searcher.Index("2", data1)
searcher.IndexDoc("3", data2)
searcher.Flush()
req := types.SearchReq{Text: "привет"}
search := searcher.Search(req)
log.Println("поиск...", поиск)
}
Riot в основном распространяется на условиях Apache License (версия 2.0), основанной на wukong.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )