wukongd
========
wukongd 是基于 [wukong](https://github.com/huichen/wukong) 的搜索引擎。作为独立的服务进程运行

* 增加接口函数 IndexDocumentS 文档 Id (docId) 为 string 类型。
* 增加 REST RPC 接口。
* 增加 wukongd.conf 配置文件 (toml 格式)。

> 如果需要使用 wukong 的代码, 可以直接导航到其 github repo, 或 checkout orig 分支.

wukongd REST API
================

- POST http://host:port/v1/index 添加索引

参数
```json
{
  "docId":"db:table:column:1",
  "content":"我爱这个世界", 
  "forceUpdate":false
}
```
- POST http://host:port/v1/delete_index 删除索引
- DELETE http://host:port/v1/index 删除索引

参数
```json
{
  "docId":"db:table:column:1"
}
```

- GET http://host:port/v1/search?keywords=xxx&offset=1&limit=10 搜索

返回
见 SearchResponse 结构体定义

wukongd 启动参数
================
- -c <config> 指定配置文件
- -t <config> 测试配置文件
- -v 打印版本
- -h 

wukongd TODO
============

增加 API

- shutdown
- stat
- if index exists already 

悟空全文搜索引擎
======

* [高效索引和搜索](/docs/benchmarking.md)（1M条微博500M数据28秒索引完，1.65毫秒搜索响应时间，19K搜索QPS）
* 支持中文分词（使用[sego分词包](https://github.com/huichen/sego)并发分词，速度27MB/秒）
* 支持计算关键词在文本中的[紧邻距离](/docs/token_proximity.md)（token proximity）
* 支持计算[BM25相关度](/docs/bm25.md)
* 支持[自定义评分字段和评分规则](/docs/custom_scoring_criteria.md)
* 支持[在线添加、删除索引](/docs/realtime_indexing.md)
* 支持[持久存储](/docs/persistent_storage.md)
* 可实现[分布式索引和搜索](/docs/distributed_indexing_and_search.md)
* 采用对商业应用友好的[Apache License v2](/license.txt)发布

[微博搜索demo](http://vhaa7.fmt.tifan.net:8080/)

# 安装/更新

```
go get -u -v github.com/huichen/wukong
```

需要Go版本至少1.1.1

# 使用

先看一个例子（来自[examples/simplest_example.go](/examples/simplest_example.go)）
```go
/*

没有比这个更简单的例子了。

*/

package main

import (
	"log"

	"github.com/huichen/wukong/engine"
	"github.com/huichen/wukong/types"
)

var (
	// searcher是线程安全的
	searcher = engine.Engine{}
)

func main() {
	// 初始化
	searcher.Init(types.EngineInitOptions{
		SegmenterDictionaries: "../data/dictionary.txt"})
	defer searcher.Close()

	// 将文档加入索引，docId 从1开始
	searcher.IndexDocumentS("db:table:1", types.DocumentIndexData{Content: "此次百度收购将成中国互联网最大并购"}, false)
	searcher.IndexDocumentS("db:table:2", types.DocumentIndexData{Content: "百度宣布拟全资收购91无线业务"}, false)
	searcher.IndexDocumentS("db:table:3", types.DocumentIndexData{Content: "百度是中国最大的搜索引擎"}, false)

	// 等待索引刷新完毕
	searcher.FlushIndex()

	// 搜索输出格式见types.SearchResponse结构体
	log.Print(searcher.Search(types.SearchRequest{Text: "百度中国"}))
}

```

是不是很简单！

然后看看一个[入门教程](/docs/codelab.md)，教你用不到200行Go代码实现一个微博搜索网站。

# 其它

* [为什么要有悟空引擎](/docs/why_wukong.md)
* [联系方式](/docs/feedback.md)
